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];
56 amrex::Real hj = (sj == 0) ? 0.5_rt : 0._rt;
57 amrex::Real hk = (sk == 0) ? 0.5_rt : 0._rt;
58 amrex::Real hl = (sl == 0) ? 0.5_rt : 0._rt;
60 amrex::Real res = 0.0_rt;
62 for (
int jj = 0;
jj < nj;
jj++) {
63 for (
int kk = 0; kk < nk; kk++) {
64 for (
int ll = 0; ll < nl; ll++) {
65 wj = (rj - amrex::Math::abs(j + hj - (jc +
jj + hj) * rj)) /
static_cast<amrex::Real
>(rj);
66 wk = (rk - amrex::Math::abs(k + hk - (kc + kk + hk) * rk)) /
static_cast<amrex::Real
>(rk);
67 wl = (rl - amrex::Math::abs(l + hl - (lc + ll + hl) * rl)) /
static_cast<amrex::Real
>(rl);
68 res += wj * wk * wl * arr_coarse_zeropad(jc+
jj,kc+kk,lc+ll);
72 arr_aux(j,k,l) = arr_fine(j,k,l) + res;
82 using namespace amrex;
85 const auto Bxf_zeropad = [Bxf] (
const int jj,
const int kk,
const int ll) noexcept
91 Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt;
95 Real wy = (k == kg*2) ? 0.0_rt : 0.5_rt;
98 #if defined(WARPX_DIM_1D_Z)
101 Real bg = owx * Bxg(jg ,0,0)
102 + wx * Bxg(jg+1,0,0);
105 Real bc = owx * Bxc(jg ,0,0)
106 + wx * Bxc(jg+1,0,0);
109 Real bf = 0.5_rt*(Bxf_zeropad(j-1,0,0) + Bxf_zeropad(j,0,0));
112 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
115 Real bg = owx * owy * Bxg(jg ,kg ,0)
116 + owx * wy * Bxg(jg ,kg+1,0)
117 + wx * owy * Bxg(jg+1,kg ,0)
118 + wx * wy * Bxg(jg+1,kg+1,0);
121 wy = 0.5_rt-wy; owy = 1.0_rt-wy;
122 Real bc = owx * owy * Bxc(jg ,kg ,0)
123 + owx * wy * Bxc(jg ,kg-1,0)
124 + wx * owy * Bxc(jg+1,kg ,0)
125 + wx * wy * Bxc(jg+1,kg-1,0);
128 Real bf = 0.5_rt*(Bxf_zeropad(j,k-1,0) + Bxf_zeropad(j,k,0));
133 Real wz = (l == lg*2) ? 0.0_rt : 0.5_rt;
134 Real owz = 1.0_rt-wz;
137 Real bg = owx * owy * owz * Bxg(jg ,kg ,lg )
138 + wx * owy * owz * Bxg(jg+1,kg ,lg )
139 + owx * wy * owz * Bxg(jg ,kg+1,lg )
140 + wx * wy * owz * Bxg(jg+1,kg+1,lg )
141 + owx * owy * wz * Bxg(jg ,kg ,lg+1)
142 + wx * owy * wz * Bxg(jg+1,kg ,lg+1)
143 + owx * wy * wz * Bxg(jg ,kg+1,lg+1)
144 + wx * wy * wz * Bxg(jg+1,kg+1,lg+1);
147 wy = 0.5_rt-wy; owy = 1.0_rt-wy;
148 wz = 0.5_rt-wz; owz = 1.0_rt-wz;
149 Real bc = owx * owy * owz * Bxc(jg ,kg ,lg )
150 + wx * owy * owz * Bxc(jg+1,kg ,lg )
151 + owx * wy * owz * Bxc(jg ,kg-1,lg )
152 + wx * wy * owz * Bxc(jg+1,kg-1,lg )
153 + owx * owy * wz * Bxc(jg ,kg ,lg-1)
154 + wx * owy * wz * Bxc(jg+1,kg ,lg-1)
155 + owx * wy * wz * Bxc(jg ,kg-1,lg-1)
156 + wx * wy * wz * Bxc(jg+1,kg-1,lg-1);
159 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));
162 Bxa(j,k,l) = bg + (bf-bc);
172 using namespace amrex;
175 const auto Byf_zeropad = [Byf] (
const int jj,
const int kk,
const int ll) noexcept
181 Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt;
182 Real owx = 1.0_rt-wx;
185 Real wy = (k == kg*2) ? 0.0_rt : 0.5_rt;
186 Real owy = 1.0_rt-wy;
188 #if defined(WARPX_DIM_1D_Z)
191 Real bg = owx * Byg(jg ,0,0)
192 + wx * Byg(jg+1,0,0);
195 Real bc = owx * Byc(jg ,0,0)
196 + wx * Byc(jg+1,0,0);
199 Real bf = 0.5_rt*(Byf_zeropad(j-1,0,0) + Byf_zeropad(j,0,0));
202 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
205 Real bg = owx * owy * Byg(jg ,kg ,0)
206 + owx * wy * Byg(jg ,kg+1,0)
207 + wx * owy * Byg(jg+1,kg ,0)
208 + wx * wy * Byg(jg+1,kg+1,0);
211 wx = 0.5_rt-wx; owx = 1.0_rt-wx;
212 wy = 0.5_rt-wy; owy = 1.0_rt-wy;
213 Real bc = owx * owy * Byc(jg ,kg ,0)
214 + owx * wy * Byc(jg ,kg-1,0)
215 + wx * owy * Byc(jg-1,kg ,0)
216 + wx * wy * Byc(jg-1,kg-1,0);
219 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));
224 Real wz = (l == lg*2) ? 0.0_rt : 0.5_rt;
225 Real owz = 1.0_rt-wz;
228 Real bg = owx * owy * owz * Byg(jg ,kg ,lg )
229 + wx * owy * owz * Byg(jg+1,kg ,lg )
230 + owx * wy * owz * Byg(jg ,kg+1,lg )
231 + wx * wy * owz * Byg(jg+1,kg+1,lg )
232 + owx * owy * wz * Byg(jg ,kg ,lg+1)
233 + wx * owy * wz * Byg(jg+1,kg ,lg+1)
234 + owx * wy * wz * Byg(jg ,kg+1,lg+1)
235 + wx * wy * wz * Byg(jg+1,kg+1,lg+1);
238 wx = 0.5_rt-wx; owx = 1.0_rt-wx;
239 wz = 0.5_rt-wz; owz = 1.0_rt-wz;
240 Real bc = owx * owy * owz * Byc(jg ,kg ,lg )
241 + wx * owy * owz * Byc(jg-1,kg ,lg )
242 + owx * wy * owz * Byc(jg ,kg+1,lg )
243 + wx * wy * owz * Byc(jg-1,kg+1,lg )
244 + owx * owy * wz * Byc(jg ,kg ,lg-1)
245 + wx * owy * wz * Byc(jg-1,kg ,lg-1)
246 + owx * wy * wz * Byc(jg ,kg+1,lg-1)
247 + wx * wy * wz * Byc(jg-1,kg+1,lg-1);
250 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));
254 Bya(j,k,l) = bg + (bf-bc);
264 using namespace amrex;
267 const auto Bzf_zeropad = [Bzf] (
const int jj,
const int kk,
const int ll) noexcept
273 Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt;
274 Real owx = 1.0_rt-wx;
277 Real wy = (k == kg*2) ? 0.0_rt : 0.5_rt;
278 Real owy = 1.0_rt-wy;
280 #if defined(WARPX_DIM_1D_Z)
283 Real bg = owx * Bzg(jg ,0,0)
284 + wx * Bzg(jg+1,0,0);
287 Real bc = owx * Bzc(jg ,0,0)
288 + wx * Bzc(jg+1,0,0);
291 Real bf = Bzf_zeropad(j,0,0);
294 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
297 Real bg = owx * owy * Bzg(jg ,kg ,0)
298 + owx * wy * Bzg(jg ,kg+1,0)
299 + wx * owy * Bzg(jg+1,kg ,0)
300 + wx * wy * Bzg(jg+1,kg+1,0);
303 wx = 0.5_rt-wx; owx = 1.0_rt-wx;
304 Real bc = owx * owy * Bzc(jg ,kg ,0)
305 + owx * wy * Bzc(jg ,kg+1,0)
306 + wx * owy * Bzc(jg-1,kg ,0)
307 + wx * wy * Bzc(jg-1,kg+1,0);
310 Real bf = 0.5_rt*(Bzf_zeropad(j-1,k,0) + Bzf_zeropad(j,k,0));
315 Real wz = (l == lg*2) ? 0.0_rt : 0.5_rt;
316 Real owz = 1.0_rt-wz;
319 Real bg = owx * owy * owz * Bzg(jg ,kg ,lg )
320 + wx * owy * owz * Bzg(jg+1,kg ,lg )
321 + owx * wy * owz * Bzg(jg ,kg+1,lg )
322 + wx * wy * owz * Bzg(jg+1,kg+1,lg )
323 + owx * owy * wz * Bzg(jg ,kg ,lg+1)
324 + wx * owy * wz * Bzg(jg+1,kg ,lg+1)
325 + owx * wy * wz * Bzg(jg ,kg+1,lg+1)
326 + wx * wy * wz * Bzg(jg+1,kg+1,lg+1);
329 wx = 0.5_rt-wx; owx = 1.0_rt-wx;
330 wy = 0.5_rt-wy; owy = 1.0_rt-wy;
331 Real bc = owx * owy * owz * Bzc(jg ,kg ,lg )
332 + wx * owy * owz * Bzc(jg-1,kg ,lg )
333 + owx * wy * owz * Bzc(jg ,kg-1,lg )
334 + wx * wy * owz * Bzc(jg-1,kg-1,lg )
335 + owx * owy * wz * Bzc(jg ,kg ,lg+1)
336 + wx * owy * wz * Bzc(jg-1,kg ,lg+1)
337 + owx * wy * wz * Bzc(jg ,kg-1,lg+1)
338 + wx * wy * wz * Bzc(jg-1,kg-1,lg+1);
341 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));
345 Bza(j,k,l) = bg + (bf-bc);
355 using namespace amrex;
358 const auto Exf_zeropad = [Exf] (
const int jj,
const int kk,
const int ll) noexcept
364 Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt;
365 Real owx = 1.0_rt-wx;
368 Real wy = (k == kg*2) ? 0.0_rt : 0.5_rt;
369 Real owy = 1.0_rt-wy;
371 #if defined(WARPX_DIM_1D_Z)
374 Real eg = owx * Exg(jg ,0,0)
375 + wx * Exg(jg+1,0,0);
378 Real ec = owx * Exc(jg ,0,0)
379 + wx * Exc(jg+1,0,0);
382 Real ef = Exf_zeropad(j,0,0);
385 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
388 Real eg = owx * owy * Exg(jg ,kg ,0)
389 + owx * wy * Exg(jg ,kg+1,0)
390 + wx * owy * Exg(jg+1,kg ,0)
391 + wx * wy * Exg(jg+1,kg+1,0);
394 wx = 0.5_rt-wx; owx = 1.0_rt-wx;
395 Real ec = owx * owy * Exc(jg ,kg ,0)
396 + owx * wy * Exc(jg ,kg+1,0)
397 + wx * owy * Exc(jg-1,kg ,0)
398 + wx * wy * Exc(jg-1,kg+1,0);
401 Real ef = 0.5_rt*(Exf_zeropad(j-1,k,0) + Exf_zeropad(j,k,0));
406 Real wz = (l == lg*2) ? 0.0 : 0.5;
407 Real owz = 1.0_rt-wz;
410 Real eg = owx * owy * owz * Exg(jg ,kg ,lg )
411 + wx * owy * owz * Exg(jg+1,kg ,lg )
412 + owx * wy * owz * Exg(jg ,kg+1,lg )
413 + wx * wy * owz * Exg(jg+1,kg+1,lg )
414 + owx * owy * wz * Exg(jg ,kg ,lg+1)
415 + wx * owy * wz * Exg(jg+1,kg ,lg+1)
416 + owx * wy * wz * Exg(jg ,kg+1,lg+1)
417 + wx * wy * wz * Exg(jg+1,kg+1,lg+1);
420 wx = 0.5_rt-wx; owx = 1.0_rt-wx;
421 Real ec = owx * owy * owz * Exc(jg ,kg ,lg )
422 + wx * owy * owz * Exc(jg-1,kg ,lg )
423 + owx * wy * owz * Exc(jg ,kg+1,lg )
424 + wx * wy * owz * Exc(jg-1,kg+1,lg )
425 + owx * owy * wz * Exc(jg ,kg ,lg+1)
426 + wx * owy * wz * Exc(jg-1,kg ,lg+1)
427 + owx * wy * wz * Exc(jg ,kg+1,lg+1)
428 + wx * wy * wz * Exc(jg-1,kg+1,lg+1);
431 Real ef = 0.5_rt*(Exf_zeropad(j-1,k,l) + Exf_zeropad(j,k,l));
435 Exa(j,k,l) = eg + (ef-ec);
445 using namespace amrex;
448 const auto Eyf_zeropad = [Eyf] (
const int jj,
const int kk,
const int ll) noexcept
454 Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt;
455 Real owx = 1.0_rt-wx;
458 Real wy = (k == kg*2) ? 0.0_rt : 0.5_rt;
459 Real owy = 1.0_rt-wy;
463 #if defined(WARPX_DIM_1D_Z)
466 Real eg = owx * Eyg(jg ,0,0)
467 + wx * Eyg(jg+1,0,0);
470 Real ec = owx * Eyc(jg ,0,0)
471 + wx * Eyc(jg+1,0,0);
474 Real ef = Eyf_zeropad(j,0,0);
477 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
480 Real eg = owx * owy * Eyg(jg ,kg ,0)
481 + owx * wy * Eyg(jg ,kg+1,0)
482 + wx * owy * Eyg(jg+1,kg ,0)
483 + wx * wy * Eyg(jg+1,kg+1,0);
486 Real ec = owx * owy * Eyc(jg ,kg ,0)
487 + owx * wy * Eyc(jg ,kg+1,0)
488 + wx * owy * Eyc(jg+1,kg ,0)
489 + wx * wy * Eyc(jg+1,kg+1,0);
492 Real ef = Eyf_zeropad(j,k,0);
497 Real wz = (l == lg*2) ? 0.0 : 0.5;
498 Real owz = 1.0_rt-wz;
501 Real eg = owx * owy * owz * Eyg(jg ,kg ,lg )
502 + wx * owy * owz * Eyg(jg+1,kg ,lg )
503 + owx * wy * owz * Eyg(jg ,kg+1,lg )
504 + wx * wy * owz * Eyg(jg+1,kg+1,lg )
505 + owx * owy * wz * Eyg(jg ,kg ,lg+1)
506 + wx * owy * wz * Eyg(jg+1,kg ,lg+1)
507 + owx * wy * wz * Eyg(jg ,kg+1,lg+1)
508 + wx * wy * wz * Eyg(jg+1,kg+1,lg+1);
511 wy = 0.5_rt-wy; owy = 1.0_rt-wy;
512 Real ec = owx * owy * owz * Eyc(jg ,kg ,lg )
513 + wx * owy * owz * Eyc(jg+1,kg ,lg )
514 + owx * wy * owz * Eyc(jg ,kg-1,lg )
515 + wx * wy * owz * Eyc(jg+1,kg-1,lg )
516 + owx * owy * wz * Eyc(jg ,kg ,lg+1)
517 + wx * owy * wz * Eyc(jg+1,kg ,lg+1)
518 + owx * wy * wz * Eyc(jg ,kg-1,lg+1)
519 + wx * wy * wz * Eyc(jg+1,kg-1,lg+1);
522 Real ef = 0.5_rt*(Eyf_zeropad(j,k-1,l) + Eyf_zeropad(j,k,l));
526 Eya(j,k,l) = eg + (ef-ec);
536 using namespace amrex;
539 const auto Ezf_zeropad = [Ezf] (
const int jj,
const int kk,
const int ll) noexcept
545 Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt;
546 Real owx = 1.0_rt-wx;
549 Real wy = (k == kg*2) ? 0.0_rt : 0.5_rt;
550 Real owy = 1.0_rt-wy;
552 #if defined(WARPX_DIM_1D_Z)
555 Real eg = owx * Ezg(jg ,0,0)
556 + wx * Ezg(jg+1,0,0);
559 Real ec = owx * Ezc(jg ,0,0)
560 + wx * Ezc(jg+1,0,0);
563 Real ef = 0.5_rt*(Ezf_zeropad(j-1,0,0) + Ezf_zeropad(j,0,0));
566 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
569 Real eg = owx * owy * Ezg(jg ,kg ,0)
570 + owx * wy * Ezg(jg ,kg+1,0)
571 + wx * owy * Ezg(jg+1,kg ,0)
572 + wx * wy * Ezg(jg+1,kg+1,0);
575 wy = 0.5_rt-wy; owy = 1.0_rt-wy;
576 Real ec = owx * owy * Ezc(jg ,kg ,0)
577 + owx * wy * Ezc(jg ,kg-1,0)
578 + wx * owy * Ezc(jg+1,kg ,0)
579 + wx * wy * Ezc(jg+1,kg-1,0);
582 Real ef = 0.5_rt*(Ezf_zeropad(j,k-1,0) + Ezf_zeropad(j,k,0));
587 Real wz = (l == lg*2) ? 0.0_rt : 0.5_rt;
588 Real owz = 1.0_rt-wz;
591 Real eg = owx * owy * owz * Ezg(jg ,kg ,lg )
592 + wx * owy * owz * Ezg(jg+1,kg ,lg )
593 + owx * wy * owz * Ezg(jg ,kg+1,lg )
594 + wx * wy * owz * Ezg(jg+1,kg+1,lg )
595 + owx * owy * wz * Ezg(jg ,kg ,lg+1)
596 + wx * owy * wz * Ezg(jg+1,kg ,lg+1)
597 + owx * wy * wz * Ezg(jg ,kg+1,lg+1)
598 + wx * wy * wz * Ezg(jg+1,kg+1,lg+1);
601 wz = 0.5_rt-wz; owz = 1.0_rt-wz;
602 Real ec = owx * owy * owz * Ezc(jg ,kg ,lg )
603 + wx * owy * owz * Ezc(jg+1,kg ,lg )
604 + owx * wy * owz * Ezc(jg ,kg+1,lg )
605 + wx * wy * owz * Ezc(jg+1,kg+1,lg )
606 + owx * owy * wz * Ezc(jg ,kg ,lg-1)
607 + wx * owy * wz * Ezc(jg+1,kg ,lg-1)
608 + owx * wy * wz * Ezc(jg ,kg+1,lg-1)
609 + wx * wy * wz * Ezc(jg+1,kg+1,lg-1);
612 Real ef = 0.5_rt*(Ezf_zeropad(j,k,l-1) + Ezf_zeropad(j,k,l));
616 Eza(j,k,l) = eg + (ef-ec);
649 amrex::Real
const* stencil_coeffs_x =
nullptr,
650 amrex::Real
const* stencil_coeffs_y =
nullptr,
651 amrex::Real
const* stencil_coeffs_z =
nullptr)
653 using namespace amrex;
657 const auto src_arr_zeropad = [src_arr] (
const int jj,
const int kk,
const int ll) noexcept
659 return src_arr.
contains(
jj,kk,ll) ? src_arr(
jj,kk,ll) : 0.0_rt;
663 #if defined(WARPX_DIM_1D_Z)
665 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
674 const int shift = (dst_nodal) ? 0 : 1;
677 const int sj = (dst_nodal) ? src_stag[0] : dst_stag[0];
678 #if (AMREX_SPACEDIM >= 2)
679 const int sk = (dst_nodal) ? src_stag[1] : dst_stag[1];
681 #if defined(WARPX_DIM_3D)
682 const int sl = (dst_nodal) ? src_stag[2] : dst_stag[2];
686 const bool interp_j = (sj == 0);
687 #if (AMREX_SPACEDIM >= 2)
688 const bool interp_k = (sk == 0);
690 #if defined(WARPX_DIM_3D)
691 const bool interp_l = (sl == 0);
694 #if defined(WARPX_DIM_1D_Z)
696 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
699 #elif defined(WARPX_DIM_3D)
706 const amrex::Real wj = (interp_j) ? 0.5_rt : 1.0_rt;
707 #if defined(WARPX_DIM_1D_Z)
708 constexpr amrex::Real wk = 1.0_rt;
709 constexpr amrex::Real wl = 1.0_rt;
710 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
711 const amrex::Real wk = (interp_k) ? 0.5_rt : 1.0_rt;
712 constexpr amrex::Real wl = 1.0_rt;
713 #elif defined(WARPX_DIM_3D)
714 const amrex::Real wk = (interp_k) ? 0.5_rt : 1.0_rt;
715 const amrex::Real wl = (interp_l) ? 0.5_rt : 1.0_rt;
719 const int jmin = (interp_j) ? j - noj/2 +
shift : j;
720 const int jmax = (interp_j) ? j + noj/2 +
shift - 1 : j;
723 #if defined(WARPX_DIM_1D_Z)
728 const int kmin = (interp_k) ? k - nok/2 +
shift : k;
729 const int kmax = (interp_k) ? k + nok/2 +
shift - 1 : k;
733 #if (AMREX_SPACEDIM <= 2)
737 #elif defined(WARPX_DIM_3D)
738 const int lmin = (interp_l) ? l - nol/2 +
shift : l;
739 const int lmax = (interp_l) ? l + nol/2 +
shift - 1 : l;
743 const int nj = jmax - jmin;
744 const int nk = kmax - kmin;
745 const int nl = lmax - lmin;
786 amrex::Real res = 0.0_rt;
788 amrex::Real cj = 1.0_rt;
789 amrex::Real ck = 1.0_rt;
790 amrex::Real cl = 1.0_rt;
792 #if defined(WARPX_DIM_1D_Z)
793 amrex::Real
const* scj = stencil_coeffs_z;
794 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
795 amrex::Real
const* scj = stencil_coeffs_x;
796 amrex::Real
const* sck = stencil_coeffs_z;
797 #elif defined(WARPX_DIM_3D)
798 amrex::Real
const* scj = stencil_coeffs_x;
799 amrex::Real
const* sck = stencil_coeffs_y;
800 amrex::Real
const* scl = stencil_coeffs_z;
803 for (
int ll = 0; ll <= nl; ll++)
805 #if defined(WARPX_DIM_3D)
806 if (interp_l) cl = scl[ll];
808 for (
int kk = 0; kk <= nk; kk++)
810 #if (AMREX_SPACEDIM >= 2)
811 if (interp_k) ck = sck[kk];
813 for (
int jj = 0;
jj <= nj;
jj++)
815 if (interp_j) cj = scj[
jj];
817 res += cj * ck * cl * src_arr_zeropad(jmin+
jj,kmin+kk,lmin+ll);
822 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:349
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:76
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:439
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:166
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:258
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:530
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE constexpr IntVectND< dim > TheNodeVector() noexcept
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE BoxND< dim > coarsen(const BoxND< dim > &b, int ref_ratio) noexcept
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void ignore_unused(const Ts &...)
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE BoxND< dim > shift(const BoxND< dim > &b, int dir, int nzones) noexcept
jj
Definition: check_interp_points_and_weights.py:160
int nox
Definition: stencil.py:442
int noy
Definition: stencil.py:443
int noz
Definition: stencil.py:444
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool contains(int i, int j, int k) const noexcept