7 #ifndef WARPX_COMM_K_H_ 8 #define WARPX_COMM_K_H_ 21 using namespace amrex;
27 const int rk = (AMREX_SPACEDIM == 1) ? 1 : rr[1];
28 const int rl = (AMREX_SPACEDIM <= 2) ? 1 : rr[2];
31 const int sj = arr_stag[0];
32 const int sk = (AMREX_SPACEDIM == 1) ? 0 : arr_stag[1];
33 const int sl = (AMREX_SPACEDIM <= 2) ? 0 : arr_stag[2];
36 const int nj = (sj == 0) ? 1 : 2;
37 const int nk = (sk == 0) ? 1 : 2;
38 const int nl = (sl == 0) ? 1 : 2;
50 amrex::Real res = 0.0_rt;
51 for (
int jj = 0;
jj < nj;
jj++) {
52 for (
int kk = 0; kk < nk; kk++) {
53 for (
int ll = 0; ll < nl; ll++) {
54 wj = (sj == 0) ? 1.0_rt : (rj - amrex::Math::abs(j - (jc +
jj) * rj))
55 / static_cast<amrex::Real>(rj);
56 wk = (sk == 0) ? 1.0_rt : (rk - amrex::Math::abs(k - (kc + kk) * rk))
57 /
static_cast<amrex::Real
>(rk);
58 wl = (sl == 0) ? 1.0_rt : (rl - amrex::Math::abs(l - (lc + ll) * rl))
59 /
static_cast<amrex::Real
>(rl);
60 res += wj * wk * wl * arr_coarse(jc+
jj,kc+kk,lc+ll);
64 arr_aux(j,k,l) = arr_fine(j,k,l) + res;
74 using namespace amrex;
77 const auto Bxf_zeropad = [Bxf] (
const int jj,
const int kk,
const int ll) noexcept
79 return Bxf.
contains(jj,kk,ll) ? Bxf(jj,kk,ll) : 0.0_rt;
83 Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt;
87 Real wy = (k == kg*2) ? 0.0_rt : 0.5_rt;
90 #if defined(WARPX_DIM_1D_Z) 93 Real bg = owx * Bxg(jg ,0,0)
97 Real bc = owx * Bxc(jg ,0,0)
101 Real bf = 0.5_rt*(Bxf_zeropad(j-1,0,0) + Bxf_zeropad(j,0,0));
104 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) 107 Real bg = owx * owy * Bxg(jg ,kg ,0)
108 + owx * wy * Bxg(jg ,kg+1,0)
109 + wx * owy * Bxg(jg+1,kg ,0)
110 + wx * wy * Bxg(jg+1,kg+1,0);
113 wy = 0.5_rt-wy; owy = 1.0_rt-wy;
114 Real bc = owx * owy * Bxc(jg ,kg ,0)
115 + owx * wy * Bxc(jg ,kg-1,0)
116 + wx * owy * Bxc(jg+1,kg ,0)
117 + wx * wy * Bxc(jg+1,kg-1,0);
120 Real bf = 0.5_rt*(Bxf_zeropad(j,k-1,0) + Bxf_zeropad(j,k,0));
125 Real wz = (l == lg*2) ? 0.0_rt : 0.5_rt;
126 Real owz = 1.0_rt-wz;
129 Real bg = owx * owy * owz * Bxg(jg ,kg ,lg )
130 + wx * owy * owz * Bxg(jg+1,kg ,lg )
131 + owx * wy * owz * Bxg(jg ,kg+1,lg )
132 + wx * wy * owz * Bxg(jg+1,kg+1,lg )
133 + owx * owy * wz * Bxg(jg ,kg ,lg+1)
134 + wx * owy * wz * Bxg(jg+1,kg ,lg+1)
135 + owx * wy * wz * Bxg(jg ,kg+1,lg+1)
136 + wx * wy * wz * Bxg(jg+1,kg+1,lg+1);
139 wy = 0.5_rt-wy; owy = 1.0_rt-wy;
140 wz = 0.5_rt-wz; owz = 1.0_rt-wz;
141 Real bc = owx * owy * owz * Bxc(jg ,kg ,lg )
142 + wx * owy * owz * Bxc(jg+1,kg ,lg )
143 + owx * wy * owz * Bxc(jg ,kg-1,lg )
144 + wx * wy * owz * Bxc(jg+1,kg-1,lg )
145 + owx * owy * wz * Bxc(jg ,kg ,lg-1)
146 + wx * owy * wz * Bxc(jg+1,kg ,lg-1)
147 + owx * wy * wz * Bxc(jg ,kg-1,lg-1)
148 + wx * wy * wz * Bxc(jg+1,kg-1,lg-1);
151 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));
154 Bxa(j,k,l) = bg + (bf-bc);
164 using namespace amrex;
167 const auto Byf_zeropad = [Byf] (
const int jj,
const int kk,
const int ll) noexcept
169 return Byf.
contains(jj,kk,ll) ? Byf(jj,kk,ll) : 0.0_rt;
173 Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt;
174 Real owx = 1.0_rt-wx;
177 Real wy = (k == kg*2) ? 0.0_rt : 0.5_rt;
178 Real owy = 1.0_rt-wy;
180 #if defined(WARPX_DIM_1D_Z) 183 Real bg = owx * Byg(jg ,0,0)
184 + wx * Byg(jg+1,0,0);
187 Real bc = owx * Byc(jg ,0,0)
188 + wx * Byc(jg+1,0,0);
191 Real bf = 0.5_rt*(Byf_zeropad(j-1,0,0) + Byf_zeropad(j,0,0));
194 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) 197 Real bg = owx * owy * Byg(jg ,kg ,0)
198 + owx * wy * Byg(jg ,kg+1,0)
199 + wx * owy * Byg(jg+1,kg ,0)
200 + wx * wy * Byg(jg+1,kg+1,0);
203 wx = 0.5_rt-wx; owx = 1.0_rt-wx;
204 wy = 0.5_rt-wy; owy = 1.0_rt-wy;
205 Real bc = owx * owy * Byc(jg ,kg ,0)
206 + owx * wy * Byc(jg ,kg-1,0)
207 + wx * owy * Byc(jg-1,kg ,0)
208 + wx * wy * Byc(jg-1,kg-1,0);
211 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));
216 Real wz = (l == lg*2) ? 0.0_rt : 0.5_rt;
217 Real owz = 1.0_rt-wz;
220 Real bg = owx * owy * owz * Byg(jg ,kg ,lg )
221 + wx * owy * owz * Byg(jg+1,kg ,lg )
222 + owx * wy * owz * Byg(jg ,kg+1,lg )
223 + wx * wy * owz * Byg(jg+1,kg+1,lg )
224 + owx * owy * wz * Byg(jg ,kg ,lg+1)
225 + wx * owy * wz * Byg(jg+1,kg ,lg+1)
226 + owx * wy * wz * Byg(jg ,kg+1,lg+1)
227 + wx * wy * wz * Byg(jg+1,kg+1,lg+1);
230 wx = 0.5_rt-wx; owx = 1.0_rt-wx;
231 wz = 0.5_rt-wz; owz = 1.0_rt-wz;
232 Real bc = owx * owy * owz * Byc(jg ,kg ,lg )
233 + wx * owy * owz * Byc(jg-1,kg ,lg )
234 + owx * wy * owz * Byc(jg ,kg+1,lg )
235 + wx * wy * owz * Byc(jg-1,kg+1,lg )
236 + owx * owy * wz * Byc(jg ,kg ,lg-1)
237 + wx * owy * wz * Byc(jg-1,kg ,lg-1)
238 + owx * wy * wz * Byc(jg ,kg+1,lg-1)
239 + wx * wy * wz * Byc(jg-1,kg+1,lg-1);
242 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));
246 Bya(j,k,l) = bg + (bf-bc);
256 using namespace amrex;
259 const auto Bzf_zeropad = [Bzf] (
const int jj,
const int kk,
const int ll) noexcept
261 return Bzf.
contains(jj,kk,ll) ? Bzf(jj,kk,ll) : 0.0_rt;
265 Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt;
266 Real owx = 1.0_rt-wx;
269 Real wy = (k == kg*2) ? 0.0_rt : 0.5_rt;
270 Real owy = 1.0_rt-wy;
272 #if defined(WARPX_DIM_1D_Z) 275 Real bg = owx * Bzg(jg ,0,0)
276 + wx * Bzg(jg+1,0,0);
279 Real bc = owx * Bzc(jg ,0,0)
280 + wx * Bzc(jg+1,0,0);
283 Real bf = Bzf_zeropad(j,0,0);
286 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) 289 Real bg = owx * owy * Bzg(jg ,kg ,0)
290 + owx * wy * Bzg(jg ,kg+1,0)
291 + wx * owy * Bzg(jg+1,kg ,0)
292 + wx * wy * Bzg(jg+1,kg+1,0);
295 wx = 0.5_rt-wx; owx = 1.0_rt-wx;
296 Real bc = owx * owy * Bzc(jg ,kg ,0)
297 + owx * wy * Bzc(jg ,kg+1,0)
298 + wx * owy * Bzc(jg-1,kg ,0)
299 + wx * wy * Bzc(jg-1,kg+1,0);
302 Real bf = 0.5_rt*(Bzf_zeropad(j-1,k,0) + Bzf_zeropad(j,k,0));
307 Real wz = (l == lg*2) ? 0.0_rt : 0.5_rt;
308 Real owz = 1.0_rt-wz;
311 Real bg = owx * owy * owz * Bzg(jg ,kg ,lg )
312 + wx * owy * owz * Bzg(jg+1,kg ,lg )
313 + owx * wy * owz * Bzg(jg ,kg+1,lg )
314 + wx * wy * owz * Bzg(jg+1,kg+1,lg )
315 + owx * owy * wz * Bzg(jg ,kg ,lg+1)
316 + wx * owy * wz * Bzg(jg+1,kg ,lg+1)
317 + owx * wy * wz * Bzg(jg ,kg+1,lg+1)
318 + wx * wy * wz * Bzg(jg+1,kg+1,lg+1);
321 wx = 0.5_rt-wx; owx = 1.0_rt-wx;
322 wy = 0.5_rt-wy; owy = 1.0_rt-wy;
323 Real bc = owx * owy * owz * Bzc(jg ,kg ,lg )
324 + wx * owy * owz * Bzc(jg-1,kg ,lg )
325 + owx * wy * owz * Bzc(jg ,kg-1,lg )
326 + wx * wy * owz * Bzc(jg-1,kg-1,lg )
327 + owx * owy * wz * Bzc(jg ,kg ,lg+1)
328 + wx * owy * wz * Bzc(jg-1,kg ,lg+1)
329 + owx * wy * wz * Bzc(jg ,kg-1,lg+1)
330 + wx * wy * wz * Bzc(jg-1,kg-1,lg+1);
333 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));
337 Bza(j,k,l) = bg + (bf-bc);
347 using namespace amrex;
350 const auto Exf_zeropad = [Exf] (
const int jj,
const int kk,
const int ll) noexcept
352 return Exf.
contains(jj,kk,ll) ? Exf(jj,kk,ll) : 0.0_rt;
356 Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt;
357 Real owx = 1.0_rt-wx;
360 Real wy = (k == kg*2) ? 0.0_rt : 0.5_rt;
361 Real owy = 1.0_rt-wy;
363 #if defined(WARPX_DIM_1D_Z) 366 Real eg = owx * Exg(jg ,0,0)
367 + wx * Exg(jg+1,0,0);
370 Real ec = owx * Exc(jg ,0,0)
371 + wx * Exc(jg+1,0,0);
374 Real ef = Exf_zeropad(j,0,0);
377 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) 380 Real eg = owx * owy * Exg(jg ,kg ,0)
381 + owx * wy * Exg(jg ,kg+1,0)
382 + wx * owy * Exg(jg+1,kg ,0)
383 + wx * wy * Exg(jg+1,kg+1,0);
386 wx = 0.5_rt-wx; owx = 1.0_rt-wx;
387 Real ec = owx * owy * Exc(jg ,kg ,0)
388 + owx * wy * Exc(jg ,kg+1,0)
389 + wx * owy * Exc(jg-1,kg ,0)
390 + wx * wy * Exc(jg-1,kg+1,0);
393 Real ef = 0.5_rt*(Exf_zeropad(j-1,k,0) + Exf_zeropad(j,k,0));
398 Real wz = (l == lg*2) ? 0.0 : 0.5;
399 Real owz = 1.0_rt-wz;
402 Real eg = owx * owy * owz * Exg(jg ,kg ,lg )
403 + wx * owy * owz * Exg(jg+1,kg ,lg )
404 + owx * wy * owz * Exg(jg ,kg+1,lg )
405 + wx * wy * owz * Exg(jg+1,kg+1,lg )
406 + owx * owy * wz * Exg(jg ,kg ,lg+1)
407 + wx * owy * wz * Exg(jg+1,kg ,lg+1)
408 + owx * wy * wz * Exg(jg ,kg+1,lg+1)
409 + wx * wy * wz * Exg(jg+1,kg+1,lg+1);
412 wx = 0.5_rt-wx; owx = 1.0_rt-wx;
413 Real ec = owx * owy * owz * Exc(jg ,kg ,lg )
414 + wx * owy * owz * Exc(jg-1,kg ,lg )
415 + owx * wy * owz * Exc(jg ,kg+1,lg )
416 + wx * wy * owz * Exc(jg-1,kg+1,lg )
417 + owx * owy * wz * Exc(jg ,kg ,lg+1)
418 + wx * owy * wz * Exc(jg-1,kg ,lg+1)
419 + owx * wy * wz * Exc(jg ,kg+1,lg+1)
420 + wx * wy * wz * Exc(jg-1,kg+1,lg+1);
423 Real ef = 0.5_rt*(Exf_zeropad(j-1,k,l) + Exf_zeropad(j,k,l));
427 Exa(j,k,l) = eg + (ef-ec);
437 using namespace amrex;
440 const auto Eyf_zeropad = [Eyf] (
const int jj,
const int kk,
const int ll) noexcept
442 return Eyf.
contains(jj,kk,ll) ? Eyf(jj,kk,ll) : 0.0_rt;
446 Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt;
447 Real owx = 1.0_rt-wx;
450 Real wy = (k == kg*2) ? 0.0_rt : 0.5_rt;
451 Real owy = 1.0_rt-wy;
455 #if defined(WARPX_DIM_1D_Z) 458 Real eg = owx * Eyg(jg ,0,0)
459 + wx * Eyg(jg+1,0,0);
462 Real ec = owx * Eyc(jg ,0,0)
463 + wx * Eyc(jg+1,0,0);
466 Real ef = Eyf_zeropad(j,0,0);
469 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) 472 Real eg = owx * owy * Eyg(jg ,kg ,0)
473 + owx * wy * Eyg(jg ,kg+1,0)
474 + wx * owy * Eyg(jg+1,kg ,0)
475 + wx * wy * Eyg(jg+1,kg+1,0);
478 Real ec = owx * owy * Eyc(jg ,kg ,0)
479 + owx * wy * Eyc(jg ,kg+1,0)
480 + wx * owy * Eyc(jg+1,kg ,0)
481 + wx * wy * Eyc(jg+1,kg+1,0);
484 Real ef = Eyf_zeropad(j,k,0);
489 Real wz = (l == lg*2) ? 0.0 : 0.5;
490 Real owz = 1.0_rt-wz;
493 Real eg = owx * owy * owz * Eyg(jg ,kg ,lg )
494 + wx * owy * owz * Eyg(jg+1,kg ,lg )
495 + owx * wy * owz * Eyg(jg ,kg+1,lg )
496 + wx * wy * owz * Eyg(jg+1,kg+1,lg )
497 + owx * owy * wz * Eyg(jg ,kg ,lg+1)
498 + wx * owy * wz * Eyg(jg+1,kg ,lg+1)
499 + owx * wy * wz * Eyg(jg ,kg+1,lg+1)
500 + wx * wy * wz * Eyg(jg+1,kg+1,lg+1);
503 wy = 0.5_rt-wy; owy = 1.0_rt-wy;
504 Real ec = owx * owy * owz * Eyc(jg ,kg ,lg )
505 + wx * owy * owz * Eyc(jg+1,kg ,lg )
506 + owx * wy * owz * Eyc(jg ,kg-1,lg )
507 + wx * wy * owz * Eyc(jg+1,kg-1,lg )
508 + owx * owy * wz * Eyc(jg ,kg ,lg+1)
509 + wx * owy * wz * Eyc(jg+1,kg ,lg+1)
510 + owx * wy * wz * Eyc(jg ,kg-1,lg+1)
511 + wx * wy * wz * Eyc(jg+1,kg-1,lg+1);
514 Real ef = 0.5_rt*(Eyf_zeropad(j,k-1,l) + Eyf_zeropad(j,k,l));
518 Eya(j,k,l) = eg + (ef-ec);
528 using namespace amrex;
531 const auto Ezf_zeropad = [Ezf] (
const int jj,
const int kk,
const int ll) noexcept
533 return Ezf.
contains(jj,kk,ll) ? Ezf(jj,kk,ll) : 0.0_rt;
537 Real wx = (j == jg*2) ? 0.0_rt : 0.5_rt;
538 Real owx = 1.0_rt-wx;
541 Real wy = (k == kg*2) ? 0.0_rt : 0.5_rt;
542 Real owy = 1.0_rt-wy;
544 #if defined(WARPX_DIM_1D_Z) 547 Real eg = owx * Ezg(jg ,0,0)
548 + wx * Ezg(jg+1,0,0);
551 Real ec = owx * Ezc(jg ,0,0)
552 + wx * Ezc(jg+1,0,0);
555 Real ef = 0.5_rt*(Ezf_zeropad(j-1,0,0) + Ezf_zeropad(j,0,0));
558 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) 561 Real eg = owx * owy * Ezg(jg ,kg ,0)
562 + owx * wy * Ezg(jg ,kg+1,0)
563 + wx * owy * Ezg(jg+1,kg ,0)
564 + wx * wy * Ezg(jg+1,kg+1,0);
567 wy = 0.5_rt-wy; owy = 1.0_rt-wy;
568 Real ec = owx * owy * Ezc(jg ,kg ,0)
569 + owx * wy * Ezc(jg ,kg-1,0)
570 + wx * owy * Ezc(jg+1,kg ,0)
571 + wx * wy * Ezc(jg+1,kg-1,0);
574 Real ef = 0.5_rt*(Ezf_zeropad(j,k-1,0) + Ezf_zeropad(j,k,0));
579 Real wz = (l == lg*2) ? 0.0_rt : 0.5_rt;
580 Real owz = 1.0_rt-wz;
583 Real eg = owx * owy * owz * Ezg(jg ,kg ,lg )
584 + wx * owy * owz * Ezg(jg+1,kg ,lg )
585 + owx * wy * owz * Ezg(jg ,kg+1,lg )
586 + wx * wy * owz * Ezg(jg+1,kg+1,lg )
587 + owx * owy * wz * Ezg(jg ,kg ,lg+1)
588 + wx * owy * wz * Ezg(jg+1,kg ,lg+1)
589 + owx * wy * wz * Ezg(jg ,kg+1,lg+1)
590 + wx * wy * wz * Ezg(jg+1,kg+1,lg+1);
593 wz = 0.5_rt-wz; owz = 1.0_rt-wz;
594 Real ec = owx * owy * owz * Ezc(jg ,kg ,lg )
595 + wx * owy * owz * Ezc(jg+1,kg ,lg )
596 + owx * wy * owz * Ezc(jg ,kg+1,lg )
597 + wx * wy * owz * Ezc(jg+1,kg+1,lg )
598 + owx * owy * wz * Ezc(jg ,kg ,lg-1)
599 + wx * owy * wz * Ezc(jg+1,kg ,lg-1)
600 + owx * wy * wz * Ezc(jg ,kg+1,lg-1)
601 + wx * wy * wz * Ezc(jg+1,kg+1,lg-1);
604 Real ef = 0.5_rt*(Ezf_zeropad(j,k,l-1) + Ezf_zeropad(j,k,l));
608 Eza(j,k,l) = eg + (ef-ec);
641 amrex::Real
const* stencil_coeffs_x =
nullptr,
642 amrex::Real
const* stencil_coeffs_y =
nullptr,
643 amrex::Real
const* stencil_coeffs_z =
nullptr)
645 using namespace amrex;
649 const auto src_arr_zeropad = [src_arr] (
const int jj,
const int kk,
const int ll) noexcept
651 return src_arr.
contains(jj,kk,ll) ? src_arr(jj,kk,ll) : 0.0_rt;
655 #if defined(WARPX_DIM_1D_Z) 657 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) 666 const int shift = (dst_nodal) ? 0 : 1;
669 const int sj = (dst_nodal) ? src_stag[0] : dst_stag[0];
670 #if (AMREX_SPACEDIM >= 2) 671 const int sk = (dst_nodal) ? src_stag[1] : dst_stag[1];
673 #if defined(WARPX_DIM_3D) 674 const int sl = (dst_nodal) ? src_stag[2] : dst_stag[2];
678 const bool interp_j = (sj == 0);
679 #if (AMREX_SPACEDIM >= 2) 680 const bool interp_k = (sk == 0);
682 #if defined(WARPX_DIM_3D) 683 const bool interp_l = (sl == 0);
686 #if defined(WARPX_DIM_1D_Z) 688 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) 691 #elif defined(WARPX_DIM_3D) 698 const amrex::Real wj = (interp_j) ? 0.5_rt : 1.0_rt;
699 #if defined(WARPX_DIM_1D_Z) 700 constexpr amrex::Real wk = 1.0_rt;
701 constexpr amrex::Real wl = 1.0_rt;
702 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) 703 const amrex::Real wk = (interp_k) ? 0.5_rt : 1.0_rt;
704 constexpr amrex::Real wl = 1.0_rt;
705 #elif defined(WARPX_DIM_3D) 706 const amrex::Real wk = (interp_k) ? 0.5_rt : 1.0_rt;
707 const amrex::Real wl = (interp_l) ? 0.5_rt : 1.0_rt;
711 const int jmin = (interp_j) ? j - noj/2 + shift : j;
712 const int jmax = (interp_j) ? j + noj/2 + shift - 1 : j;
715 #if defined(WARPX_DIM_1D_Z) 720 const int kmin = (interp_k) ? k - nok/2 + shift : k;
721 const int kmax = (interp_k) ? k + nok/2 + shift - 1 : k;
725 #if (AMREX_SPACEDIM <= 2) 729 #elif defined(WARPX_DIM_3D) 730 const int lmin = (interp_l) ? l - nol/2 + shift : l;
731 const int lmax = (interp_l) ? l + nol/2 + shift - 1 : l;
735 const int nj = jmax - jmin;
736 const int nk = kmax - kmin;
737 const int nl = lmax - lmin;
778 amrex::Real res = 0.0_rt;
780 amrex::Real cj = 1.0_rt;
781 amrex::Real ck = 1.0_rt;
782 amrex::Real cl = 1.0_rt;
784 #if defined(WARPX_DIM_1D_Z) 785 amrex::Real
const* scj = stencil_coeffs_z;
786 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ) 787 amrex::Real
const* scj = stencil_coeffs_x;
788 amrex::Real
const* sck = stencil_coeffs_z;
789 #elif defined(WARPX_DIM_3D) 790 amrex::Real
const* scj = stencil_coeffs_x;
791 amrex::Real
const* sck = stencil_coeffs_y;
792 amrex::Real
const* scl = stencil_coeffs_z;
795 for (
int ll = 0; ll <= nl; ll++)
797 #if defined(WARPX_DIM_3D) 798 if (interp_l) cl = scl[ll];
800 for (
int kk = 0; kk <= nk; kk++)
802 #if (AMREX_SPACEDIM >= 2) 803 if (interp_k) ck = sck[kk];
805 for (
int jj = 0; jj <= nj; jj++)
807 if (interp_j) cj = scj[
jj];
809 res += cj * ck * cl * src_arr_zeropad(jmin+jj,kmin+kk,lmin+ll);
814 dst_arr(j,k,l) = wj * wk * wl * res;
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Box shift(const Box &b, int dir, int nzones) noexcept
int noz
Definition: Stencil.py:472
int noy
Definition: Stencil.py:471
int nox
Definition: Stencil.py:470
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:431
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void ignore_unused(const Ts &...)
#define AMREX_FORCE_INLINE
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Box coarsen(const Box &b, int ref_ratio) noexcept
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool contains(int i, int j, int k) const noexcept
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:158
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:68
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:341
jj
Definition: check_interp_points_and_weights.py:159
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:522
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:250
AMREX_GPU_HOST_DEVICE static constexpr AMREX_FORCE_INLINE IntVect TheNodeVector() noexcept
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