1#ifndef NUMERIC_STENCIL_H_
2#define NUMERIC_STENCIL_H_
5#include <AMReX_MultiFab.H>
9#include "Set/Matrix4.H"
22static std::array<StencilType, AMREX_SPACEDIM>
24[[maybe_unused]]
static std::array<StencilType, AMREX_SPACEDIM>
26[[maybe_unused]]
static std::array<StencilType, AMREX_SPACEDIM>
29[[maybe_unused]]
static std::array<StencilType, AMREX_SPACEDIM>
31[[maybe_unused]]
static std::array<StencilType, AMREX_SPACEDIM>
35[[maybe_unused]]
static std::array<StencilType, AMREX_SPACEDIM>
37[[maybe_unused]]
static std::array<StencilType, AMREX_SPACEDIM>
44std::array<StencilType, AMREX_SPACEDIM>
45GetStencil(
const int i,
const int j,
const int k,
const amrex::Box domain)
47 (void)i; (void)j; (void)k;
48 std::array<StencilType, AMREX_SPACEDIM> sten;
49 const amrex::Dim3 lo = amrex::lbound(domain), hi = amrex::ubound(domain);
62template<
class T,
int x,
int y,
int z>
73 [[nodiscard]] AMREX_FORCE_INLINE
74 static T
D(
const amrex::Array4<const T>& f,
75 const int& i,
const int& j,
const int& k,
const int& m,
77 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
80 return (f(i, j, k, m) - f(i - 1, j, k, m)) / dx[0];
82 return (f(i + 1, j, k, m) - f(i, j, k, m)) / dx[0];
84 return (f(i + 1, j, k, m) - f(i - 1, j, k, m)) * 0.5 / dx[0];
86 [[nodiscard]] AMREX_FORCE_INLINE
87 static std::pair<Set::Scalar,T>
88 Dsplit(
const amrex::Array4<const T>& f,
89 const int& i,
const int& j,
const int& k,
const int& m,
91 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
94 return std::make_pair(
96 -f(i - 1, j, k, m) / dx[0]
99 return std::make_pair(
101 f(i + 1, j, k, m) / dx[0]
104 return std::make_pair(
106 (f(i + 1, j, k, m) - f(i - 1, j, k, m)) * 0.5 / dx[0]
114 [[nodiscard]] AMREX_FORCE_INLINE
115 static T
D(
const amrex::Array4<const T>& f,
116 const int& i,
const int& j,
const int& k,
const int& m,
118 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
121 return (f(i, j, k, m) - f(i, j - 1, k, m)) / dx[1];
123 return (f(i, j + 1, k, m) - f(i, j, k, m)) / dx[1];
125 return (f(i, j + 1, k, m) - f(i, j - 1, k, m)) * 0.5 / dx[1];
127 [[nodiscard]] AMREX_FORCE_INLINE
128 static std::pair<Set::Scalar,T>
130 const int& i,
const int& j,
const int& k,
const int& m,
132 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
135 return std::make_pair(
137 - f(i, j - 1, k, m) / dx[1]
140 return std::make_pair(
142 f(i, j + 1, k, m) / dx[1]
145 return std::make_pair(
147 (f(i, j + 1, k, m) - f(i, j - 1, k, m)) * 0.5 / dx[1]
155 [[nodiscard]] AMREX_FORCE_INLINE
156 static T
D(
const amrex::Array4<const T>& f,
157 const int& i,
const int& j,
const int& k,
const int& m,
159 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
162 return (f(i, j, k, m) - f(i, j, k - 1, m)) / dx[2];
164 return (f(i, j, k + 1, m) - f(i, j, k, m)) / dx[2];
166 return (f(i, j, k + 1, m) - f(i, j, k - 1, m)) * 0.5 / dx[2];
168 [[nodiscard]] AMREX_FORCE_INLINE
169 static std::pair<Set::Scalar, T>
171 const int& i,
const int& j,
const int& k,
const int& m,
173 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
176 return std::make_pair(
178 -f(i, j, k - 1, m) / dx[2]
181 return std::make_pair(
183 f(i, j, k + 1, m) / dx[2]
186 return std::make_pair(
188 (f(i, j, k + 1, m) - f(i, j, k - 1, m)) * 0.5 / dx[2]
200 [[nodiscard]] AMREX_FORCE_INLINE
201 static T
D(
const amrex::Array4<const T>& f,
202 const int& i,
const int& j,
const int& k,
const int& m,
204 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
207 return (f(i + 1, j, k, m) - 2.0 * f(i, j, k, m) + f(i - 1, j, k, m)) / dx[0] / dx[0];
209 return 0.0 * f(i, j, k, m);
216 [[nodiscard]] AMREX_FORCE_INLINE
217 static T
D(
const amrex::Array4<const T>& f,
218 const int& i,
const int& j,
const int& k,
const int& m,
220 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
223 return (f(i, j + 1, k, m) - 2.0 * f(i, j, k, m) + f(i, j - 1, k, m)) / dx[1] / dx[1];
225 return 0.0 * f(i, j, k, m);
232 [[nodiscard]] AMREX_FORCE_INLINE
233 static T
D(
const amrex::Array4<const T>& f,
234 const int& i,
const int& j,
const int& k,
const int& m,
236 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
239 return (f(i, j, k + 1, m) - 2.0 * f(i, j, k, m) + f(i, j, k - 1, m)) / dx[2] / dx[2];
241 return 0.0 * f(i, j, k, m);
248 [[nodiscard]] AMREX_FORCE_INLINE
249 static T
D(
const amrex::Array4<const T>& f,
250 const int& i,
const int& j,
const int& k,
const int& m,
252 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
254 int ihi = 1, ilo = 1, jhi = 1, jlo = 1;
261 return ifac * jfac * (f(i + ihi, j + jhi, k, m) + f(i - ilo, j - jlo, k, m) - f(i + ihi, j - jlo, k, m) - f(i - ilo, j + jhi, k, m)) / (dx[0] * dx[1]);
267 [[nodiscard]] AMREX_FORCE_INLINE
268 static T
D(
const amrex::Array4<const T>& f,
269 const int& i,
const int& j,
const int& k,
const int& m,
271 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
273 int khi = 1, klo = 1, ihi = 1, ilo = 1;
280 return kfac * ifac * (f(i + ihi, j, k + khi, m) + f(i - ilo, j, k - klo, m) - f(i + ihi, j, k - klo, m) - f(i - ilo, j, k + khi, m)) / (dx[0] * dx[2]);
286 [[nodiscard]] AMREX_FORCE_INLINE
287 static T
D(
const amrex::Array4<const T>& f,
288 const int& i,
const int& j,
const int& k,
const int& m,
290 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
292 int jhi = 1, jlo = 1, khi = 1, klo = 1;
299 return jfac * kfac * (f(i, j + jhi, k + khi, m) + f(i, j - jlo, k - klo, m) - f(i, j + jhi, k - klo, m) - f(i, j - jlo, k + khi, m)) / (dx[1] * dx[2]);
310 [[nodiscard]] AMREX_FORCE_INLINE
311 static T
D(
const amrex::Array4<const T>& f,
312 const int& i,
const int& j,
const int& k,
const int& m,
315 return ((f(i + 2, j, k, m)) - 4. * (f(i + 1, j, k, m)) + 6. * (f(i, j, k, m)) - 4. * (f(i - 1, j, k, m)) + (f(i - 2, j, k, m))) /
316 (dx[0] * dx[0] * dx[0] * dx[0]);
322 [[nodiscard]] AMREX_FORCE_INLINE
323 static T
D(
const amrex::Array4<const T>& f,
324 const int& i,
const int& j,
const int& k,
const int& m,
327 return ((f(i, j + 2, k, m)) - 4. * (f(i, j + 1, k, m)) + 6. * (f(i, j, k, m)) - 4. * (f(i, j - 1, k, m)) + (f(i, j - 2, k, m))) /
328 (dx[1] * dx[1] * dx[1] * dx[1]);
334 [[nodiscard]] AMREX_FORCE_INLINE
335 static T
D(
const amrex::Array4<const T>& f,
336 const int& i,
const int& j,
const int& k,
const int& m,
339 return ((f(i, j, k + 2, m)) - 4. * (f(i, j, k + 1, m)) + 6. * (f(i, j, k, m)) - 4. * (f(i, j, k - 1, m)) + (f(i, j, k - 2, m))) /
340 (dx[2] * dx[2] * dx[2] * dx[2]);
349 [[nodiscard]] AMREX_FORCE_INLINE
350 static T
D(
const amrex::Array4<const T>& f,
351 const int& i,
const int& j,
const int& k,
const int& m,
354 return ((-f(i + 2, j + 2, k, m) + 8.0 * f(i + 2, j + 1, k, m) - 8.0 * f(i + 2, j - 1, k, m) + f(i + 2, j - 2, k, m))
355 - 2 * (-f(i + 1, j + 2, k, m) + 8.0 * f(i + 1, j + 1, k, m) - 8.0 * f(i + 1, j - 1, k, m) + f(i + 1, j - 2, k, m))
356 + 2 * (-f(i - 1, j + 2, k, m) + 8.0 * f(i - 1, j + 1, k, m) - 8.0 * f(i - 1, j - 1, k, m) + f(i - 1, j - 2, k, m))
357 - (-f(i - 2, j + 2, k, m) + 8.0 * f(i - 2, j + 1, k, m) - 8.0 * f(i - 2, j - 1, k, m) + f(i - 2, j - 2, k, m))) /
358 (24.0 * dx[0] * dx[0] * dx[0] * dx[1]);
367 [[nodiscard]] AMREX_FORCE_INLINE
368 static T
D(
const amrex::Array4<const T>& f,
369 const int& i,
const int& j,
const int& k,
const int& m,
372 return ((-f(i + 2, j + 2, k, m) + 8.0 * f(i + 1, j + 2, k, m) - 8.0 * f(i - 1, j + 2, k, m) + f(i - 2, j + 2, k, m))
373 - 2 * (-f(i + 2, j + 1, k, m) + 8.0 * f(i + 1, j + 1, k, m) - 8.0 * f(i - 1, j + 1, k, m) + f(i - 2, j + 1, k, m))
374 + 2 * (-f(i + 2, j - 1, k, m) + 8.0 * f(i + 1, j - 1, k, m) - 8.0 * f(i - 1, j - 1, k, m) + f(i - 2, j - 1, k, m))
375 - (-f(i + 2, j - 2, k, m) + 8.0 * f(i + 1, j - 2, k, m) - 8.0 * f(i - 1, j - 2, k, m) + f(i - 2, j - 2, k, m))) /
376 (24.0 * dx[0] * dx[1] * dx[1] * dx[1]);
385 [[nodiscard]] AMREX_FORCE_INLINE
386 static T
D(
const amrex::Array4<const T>& f,
387 const int& i,
const int& j,
const int& k,
const int& m,
390 return ((-f(i, j + 2, k + 2, m) + 8.0 * f(i, j + 2, k + 1, m) - 8.0 * f(i, j + 2, k - 1, m) + f(i, j + 2, k - 2, m))
391 - 2 * (-f(i, j + 1, k + 2, m) + 8.0 * f(i, j + 1, k + 1, m) - 8.0 * f(i, j + 1, k - 1, m) + f(i, j + 1, k - 2, m))
392 + 2 * (-f(i, j - 1, k + 2, m) + 8.0 * f(i, j - 1, k + 1, m) - 8.0 * f(i, j - 1, k - 1, m) + f(i, j - 1, k - 2, m))
393 - (-f(i, j - 2, k + 2, m) + 8.0 * f(i, j - 2, k + 1, m) - 8.0 * f(i, j - 2, k - 1, m) + f(i, j - 2, k - 2, m))) /
394 (24.0 * dx[1] * dx[1] * dx[1] * dx[2]);
401 [[nodiscard]] AMREX_FORCE_INLINE
402 static T
D(
const amrex::Array4<const T>& f,
403 const int& i,
const int& j,
const int& k,
const int& m,
406 return ((-f(i, j + 2, k + 2, m) + 8.0 * f(i, j + 1, k + 2, m) - 8.0 * f(i, j - 1, k + 2, m) + f(i, j - 2, k + 2, m))
407 - 2 * (-f(i, j + 2, k + 1, m) + 8.0 * f(i, j + 1, k + 1, m) - 8.0 * f(i, j - 1, k + 1, m) + f(i, j - 2, k + 1, m))
408 + 2 * (-f(i, j + 2, k - 1, m) + 8.0 * f(i, j + 1, k - 1, m) - 8.0 * f(i, j - 1, k - 1, m) + f(i, j - 2, k - 1, m))
409 - (-f(i, j + 2, k - 2, m) + 8.0 * f(i, j + 1, k - 2, m) - 8.0 * f(i, j - 1, k - 2, m) + f(i, j - 2, k - 2, m))) /
410 (24.0 * dx[1] * dx[2] * dx[2] * dx[2]);
417 [[nodiscard]] AMREX_FORCE_INLINE
418 static T
D(
const amrex::Array4<const T>& f,
419 const int& i,
const int& j,
const int& k,
const int& m,
422 return ((-f(i + 2, j, k + 2, m) + 8.0 * f(i + 1, j, k + 2, m) - 8.0 * f(i - 1, j, k + 2, m) + f(i - 2, j, k + 2, m))
423 - 2 * (-f(i + 2, j, k + 1, m) + 8.0 * f(i + 1, j, k + 1, m) - 8.0 * f(i - 1, j, k + 1, m) + f(i - 2, j, k + 1, m))
424 + 2 * (-f(i + 2, j, k - 1, m) + 8.0 * f(i + 1, j, k - 1, m) - 8.0 * f(i - 1, j, k - 1, m) + f(i - 2, j, k - 1, m))
425 - (-f(i + 2, j, k - 2, m) + 8.0 * f(i + 1, j, k - 2, m) - 8.0 * f(i - 1, j, k - 2, m) + f(i - 2, j, k - 2, m))) /
426 (24.0 * dx[0] * dx[2] * dx[2] * dx[2]);
434 [[nodiscard]] AMREX_FORCE_INLINE
435 static T
D(
const amrex::Array4<const T>& f,
436 const int& i,
const int& j,
const int& k,
const int& m,
439 return ((-f(i + 2, j, k + 2, m) + 8.0 * f(i + 2, j, k + 1, m) - 8.0 * f(i + 2, j, k - 1, m) + f(i + 2, j, k - 2, m))
440 - 2 * (-f(i + 1, j, k + 2, m) + 8.0 * f(i + 1, j, k + 1, m) - 8.0 * f(i + 1, j, k - 1, m) + f(i + 1, j, k - 2, m))
441 + 2 * (-f(i - 1, j, k + 2, m) + 8.0 * f(i - 1, j, k + 1, m) - 8.0 * f(i - 1, j, k - 1, m) + f(i - 1, j, k - 2, m))
442 - (-f(i - 2, j, k + 2, m) + 8.0 * f(i - 2, j, k + 1, m) - 8.0 * f(i - 2, j, k - 1, m) + f(i - 2, j, k - 2, m))) /
443 (24.0 * dx[0] * dx[0] * dx[0] * dx[2]);
451 [[nodiscard]] AMREX_FORCE_INLINE
452 static T
D(
const amrex::Array4<const T>& f,
453 const int& i,
const int& j,
const int& k,
const int& m,
456 return (-(-f(i + 2, j + 2, k, m) + 16.0 * f(i + 1, j + 2, k, m) - 30.0 * f(i, j + 2, k, m) + 16.0 * f(i - 1, j + 2, k, m) - f(i - 2, j + 2, k, m))
457 + 16 * (-f(i + 2, j + 1, k, m) + 16.0 * f(i + 1, j + 1, k, m) - 30.0 * f(i, j + 1, k, m) + 16.0 * f(i - 1, j + 1, k, m) - f(i - 2, j + 1, k, m))
458 - 30 * (-f(i + 2, j, k, m) + 16.0 * f(i + 1, j, k, m) - 30.0 * f(i, j, k, m) + 16.0 * f(i - 1, j, k, m) - f(i - 2, j, k, m))
459 + 16 * (-f(i + 2, j - 1, k, m) + 16.0 * f(i + 1, j - 1, k, m) - 30.0 * f(i, j - 1, k, m) + 16.0 * f(i - 1, j - 1, k, m) - f(i - 2, j - 1, k, m))
460 - (-f(i + 2, j - 2, k, m) + 16.0 * f(i + 1, j - 2, k, m) - 30.0 * f(i, j - 2, k, m) + 16.0 * f(i - 1, j - 2, k, m) - f(i - 2, j - 2, k, m))) /
461 (144.0 * dx[0] * dx[0] * dx[1] * dx[1]);
469 [[nodiscard]] AMREX_FORCE_INLINE
470 static T
D(
const amrex::Array4<const T>& f,
471 const int& i,
const int& j,
const int& k,
const int& m,
474 return (-(-f(i, j + 2, k + 2, m) + 16.0 * f(i, j + 2, k + 1, m) - 30.0 * f(i, j + 2, k, m) + 16.0 * f(i, j + 2, k - 1, m) - f(i, j + 2, k - 2, m))
475 + 16 * (-f(i, j + 1, k + 2, m) + 16.0 * f(i, j + 1, k + 1, m) - 30.0 * f(i, j + 1, k, m) + 16.0 * f(i, j + 1, k - 1, m) - f(i, j + 1, k - 2, m))
476 - 30 * (-f(i, j, k + 2, m) + 16.0 * f(i, j, k + 1, m) - 30.0 * f(i, j, k, m) + 16.0 * f(i, j, k - 1, m) - f(i, j, k - 2, m))
477 + 16 * (-f(i, j - 1, k + 2, m) + 16.0 * f(i, j - 1, k + 1, m) - 30.0 * f(i, j - 1, k, m) + 16.0 * f(i, j - 1, k - 1, m) - f(i, j - 1, k - 2, m))
478 - (-f(i, j - 2, k + 2, m) + 16.0 * f(i, j - 2, k + 1, m) - 30.0 * f(i, j - 2, k, m) + 16.0 * f(i, j - 2, k - 1, m) - f(i, j - 2, k - 2, m))) /
479 (144.0 * dx[0] * dx[0] * dx[2] * dx[2]);
486 [[nodiscard]] AMREX_FORCE_INLINE
487 static T
D(
const amrex::Array4<const T>& f,
488 const int& i,
const int& j,
const int& k,
const int& m,
491 return (-(-f(i + 2, j, k + 2, m) + 16.0 * f(i + 2, j, k + 1, m) - 30.0 * f(i + 2, j, k, m) + 16.0 * f(i + 2, j, k - 1, m) - f(i + 2, j, k - 2, m))
492 + 16 * (-f(i + 1, j, k + 2, m) + 16.0 * f(i + 1, j, k + 1, m) - 30.0 * f(i + 1, j, k, m) + 16.0 * f(i + 1, j, k - 1, m) - f(i + 1, j, k - 2, m))
493 - 30 * (-f(i, j, k + 2, m) + 16.0 * f(i, j, k + 1, m) - 30.0 * f(i, j, k, m) + 16.0 * f(i, j, k - 1, m) - f(i, j, k - 2, m))
494 + 16 * (-f(i - 1, j, k + 2, m) + 16.0 * f(i - 1, j, k + 1, m) - 30.0 * f(i - 1, j, k, m) + 16.0 * f(i - 1, j, k - 1, m) - f(i - 1, j, k - 2, m))
495 - (-f(i - 2, j, k + 2, m) + 16.0 * f(i - 2, j, k + 1, m) - 30.0 * f(i - 2, j, k, m) + 16.0 * f(i - 2, j, k - 1, m) - f(i - 2, j, k - 2, m))) /
496 (144.0 * dx[0] * dx[0] * dx[2] * dx[2]);
505 [[nodiscard]] AMREX_FORCE_INLINE
506 static T
D(
const amrex::Array4<const T>& f,
507 const int& i,
const int& j,
const int& k,
const int& m,
510 return (+(f(i + 1, j + 1, k + 1, m) - 2.0 * f(i, j + 1, k + 1, m) + f(i - 1, j + 1, k + 1, m))
511 - (f(i + 1, j - 1, k + 1, m) - 2.0 * f(i, j - 1, k + 1, m) + f(i - 1, j - 1, k + 1, m))
512 - (f(i + 1, j + 1, k - 1, m) - 2.0 * f(i, j + 1, k - 1, m) + f(i - 1, j + 1, k - 1, m))
513 + (f(i + 1, j - 1, k - 1, m) - 2.0 * f(i, j - 1, k - 1, m) + f(i - 1, j - 1, k - 1, m)))
514 / (4.0 * dx[0] * dx[0] * dx[1] * dx[2]);
522 [[nodiscard]] AMREX_FORCE_INLINE
523 static T
D(
const amrex::Array4<const T>& f,
524 const int& i,
const int& j,
const int& k,
const int& m,
527 return (+(f(i + 1, j + 1, k + 1, m) - 2.0 * f(i + 1, j, k + 1, m) + f(i + 1, j - 1, k + 1, m))
528 - (f(i - 1, j + 1, k + 1, m) - 2.0 * f(i - 1, j, k + 1, m) + f(i - 1, j - 1, k + 1, m))
529 - (f(i + 1, j + 1, k - 1, m) - 2.0 * f(i + 1, j, k - 1, m) + f(i + 1, j - 1, k - 1, m))
530 + (f(i - 1, j + 1, k - 1, m) - 2.0 * f(i - 1, j, k - 1, m) + f(i - 1, j - 1, k - 1, m)))
531 / (4.0 * dx[0] * dx[1] * dx[1] * dx[2]);
539 [[nodiscard]] AMREX_FORCE_INLINE
540 static T
D(
const amrex::Array4<const T>& f,
541 const int& i,
const int& j,
const int& k,
const int& m,
544 return (+(f(i + 1, j + 1, k + 1, m) - 2.0 * f(i + 1, j + 1, k, m) + f(i + 1, j + 1, k - 1, m))
545 - (f(i - 1, j + 1, k + 1, m) - 2.0 * f(i - 1, j + 1, k, m) + f(i - 1, j + 1, k - 1, m))
546 - (f(i + 1, j - 1, k + 1, m) - 2.0 * f(i + 1, j - 1, k, m) + f(i + 1, j - 1, k - 1, m))
547 + (f(i - 1, j - 1, k + 1, m) - 2.0 * f(i - 1, j - 1, k, m) + f(i - 1, j - 1, k - 1, m)))
548 / (4.0 * dx[0] * dx[1] * dx[1] * dx[2]);
553[[nodiscard]] AMREX_FORCE_INLINE
556 const int& i,
const int& j,
const int& k,
const int& m,
558 std::array<StencilType, AMREX_SPACEDIM>& stencil =
DefaultType)
562#if AMREX_SPACEDIM > 1
564#if AMREX_SPACEDIM > 2
571[[nodiscard]] AMREX_FORCE_INLINE
574 const int& i,
const int& j,
const int& k,
579#if AMREX_SPACEDIM > 1
581#if AMREX_SPACEDIM > 2
588[[nodiscard]] AMREX_FORCE_INLINE
591 const int& i,
const int& j,
const int& k,
593 std::array<StencilType, AMREX_SPACEDIM>& stencil =
DefaultType)
599 AMREX_D_TERM(ret(0) += (dw(i + 1, j, k)(0, 0) - dw(i - 1, j, k)(0, 0)) / 2. / DX[0];,
600 ret(1) += (dw(i + 1, j, k)(1, 0) - dw(i - 1, j, k)(1, 0)) / 2. / DX[0];,
601 ret(2) += (dw(i + 1, j, k)(2, 0) - dw(i - 1, j, k)(2, 0)) / 2. / DX[0];)
605 AMREX_D_TERM(ret(0) += (dw(i, j, k)(0, 0) - dw(i - 1, j, k)(0, 0)) / DX[0];,
606 ret(1) += (dw(i, j, k)(1, 0) - dw(i - 1, j, k)(1, 0)) / DX[0];,
607 ret(2) += (dw(i, j, k)(2, 0) - dw(i - 1, j, k)(2, 0)) / DX[0];)
611 AMREX_D_TERM(ret(0) += (dw(i + 1, j, k)(0, 0) - dw(i, j, k)(0, 0)) / DX[0];,
612 ret(1) += (dw(i + 1, j, k)(1, 0) - dw(i, j, k)(1, 0)) / DX[0];,
613 ret(2) += (dw(i + 1, j, k)(2, 0) - dw(i, j, k)(2, 0)) / DX[0];)
616#if AMREX_SPACEDIM > 1
619 AMREX_D_TERM(ret(0) += (dw(i, j + 1, k)(0, 1) - dw(i, j - 1, k)(0, 1)) / 2. / DX[1];,
620 ret(1) += (dw(i, j + 1, k)(1, 1) - dw(i, j - 1, k)(1, 1)) / 2. / DX[1];,
621 ret(2) += (dw(i, j + 1, k)(2, 1) - dw(i, j - 1, k)(2, 1)) / 2. / DX[1];)
625 AMREX_D_TERM(ret(0) += (dw(i, j, k)(0, 1) - dw(i, j - 1, k)(0, 1)) / DX[1];,
626 ret(1) += (dw(i, j, k)(1, 1) - dw(i, j - 1, k)(1, 1)) / DX[1];,
627 ret(2) += (dw(i, j, k)(2, 1) - dw(i, j - 1, k)(2, 1)) / DX[1];)
631 AMREX_D_TERM(ret(0) += (dw(i, j + 1, k)(0, 1) - dw(i, j, k)(0, 1)) / DX[1];,
632 ret(1) += (dw(i, j + 1, k)(1, 1) - dw(i, j, k)(1, 1)) / DX[1];,
633 ret(2) += (dw(i, j + 1, k)(2, 1) - dw(i, j, k)(2, 1)) / DX[1];)
636#if AMREX_SPACEDIM > 2
639 AMREX_D_TERM(ret(0) += (dw(i, j, k + 1)(0, 2) - dw(i, j, k - 1)(0, 2)) / 2. / DX[2];,
640 ret(1) += (dw(i, j, k + 1)(1, 2) - dw(i, j, k - 1)(1, 2)) / 2. / DX[2];,
641 ret(2) += (dw(i, j, k + 1)(2, 2) - dw(i, j, k - 1)(2, 2)) / 2. / DX[2];)
645 AMREX_D_TERM(ret(0) += (dw(i, j, k)(0, 2) - dw(i, j, k - 1)(0, 2)) / DX[2];,
646 ret(1) += (dw(i, j, k)(1, 2) - dw(i, j, k - 1)(1, 2)) / DX[2];,
647 ret(2) += (dw(i, j, k)(2, 2) - dw(i, j, k - 1)(2, 2)) / DX[2];)
651 AMREX_D_TERM(ret(0) += (dw(i, j, k + 1)(0, 2) - dw(i, j, k)(0, 2)) / DX[2];,
652 ret(1) += (dw(i, j, k + 1)(1, 2) - dw(i, j, k)(1, 2)) / DX[2];,
653 ret(2) += (dw(i, j, k + 1)(2, 2) - dw(i, j, k)(2, 2)) / DX[2];)
660[[nodiscard]] AMREX_FORCE_INLINE
663 const int &i,
const int &j,
const int &k,
const int &m,
665 std::array<StencilType,AMREX_SPACEDIM> stencil =
DefaultType)
669#if AMREX_SPACEDIM > 1
672#if AMREX_SPACEDIM > 2
679[[nodiscard]] AMREX_FORCE_INLINE
682 const int& i,
const int& j,
const int& k,
const int& m,
684 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
688#if AMREX_SPACEDIM > 1
690#if AMREX_SPACEDIM > 2
697[[nodiscard]] AMREX_FORCE_INLINE
700 const int& i,
const int& j,
const int& k,
const int& m,
704#if AMREX_SPACEDIM == 1
705 ret(0) = (f(i, j, k, m) - f(i - 1, j, k, m)) / dx[0];
706#elif AMREX_SPACEDIM == 2
707 ret(0) = 0.5 * (f(i, j, k, m) - f(i - 1, j, k, m) + f(i, j - 1, k, m) - f(i - 1, j - 1, k, m)) / dx[0];
708 ret(1) = 0.5 * (f(i, j, k, m) - f(i, j - 1, k, m) + f(i - 1, j, k, m) - f(i - 1, j - 1, k, m)) / dx[1];
709#elif AMREX_SPACEDIM == 3
710 ret(0) = 0.25 * (f(i, j, k, m) - f(i - 1, j, k, m) + f(i, j - 1, k, m) - f(i - 1, j - 1, k, m) + f(i, j, k - 1, m) - f(i - 1, j, k - 1, m) + f(i, j - 1, k - 1, m) - f(i - 1, j - 1, k - 1, m)) / dx[0];
711 ret(1) = 0.25 * (f(i, j, k, m) - f(i, j - 1, k, m) + f(i - 1, j, k, m) - f(i - 1, j - 1, k, m) + f(i, j, k - 1, m) - f(i, j - 1, k - 1, m) + f(i - 1, j, k - 1, m) - f(i - 1, j - 1, k - 1, m)) / dx[1];
712 ret(2) = 0.25 * (f(i, j, k, m) - f(i, j, k - 1, m) + f(i - 1, j, k, m) - f(i - 1, j, k - 1, m) + f(i, j - 1, k, m) - f(i, j - 1, k - 1, m) + f(i - 1, j - 1, k, m) - f(i - 1, j - 1, k - 1, m)) / dx[2];
719[[nodiscard]] AMREX_FORCE_INLINE
720std::array<T, AMREX_SPACEDIM>
722 const int& i,
const int& j,
const int& k,
const int& m,
725 std::array<T, AMREX_SPACEDIM> ret;
727#if AMREX_SPACEDIM == 1
728 ret[0] = (f(i, j, k, m) - f(i - 1, j, k, m)) / dx[0];
729#elif AMREX_SPACEDIM == 2
730 ret[0] = (f(i, j, k, m) - f(i - 1, j, k, m) + f(i, j - 1, k, m) - f(i - 1, j - 1, k, m)) * 0.5 / dx[0];
731 ret[1] = (f(i, j, k, m) - f(i, j - 1, k, m) + f(i - 1, j, k, m) - f(i - 1, j - 1, k, m)) * 0.5 / dx[1];
732#elif AMREX_SPACEDIM == 3
733 ret[0] = (f(i, j, k, m) - f(i - 1, j, k, m) + f(i, j - 1, k, m) - f(i - 1, j - 1, k, m) + f(i, j, k - 1, m) - f(i - 1, j, k - 1, m) + f(i, j - 1, k - 1, m) - f(i - 1, j - 1, k - 1, m)) * 0.25 / dx[0];
734 ret[1] = (f(i, j, k, m) - f(i, j - 1, k, m) + f(i - 1, j, k, m) - f(i - 1, j - 1, k, m) + f(i, j, k - 1, m) - f(i, j - 1, k - 1, m) + f(i - 1, j, k - 1, m) - f(i - 1, j - 1, k - 1, m)) * 0.25 / dx[1];
735 ret[2] = (f(i, j, k, m) - f(i, j, k - 1, m) + f(i - 1, j, k, m) - f(i - 1, j, k - 1, m) + f(i, j - 1, k, m) - f(i, j - 1, k - 1, m) + f(i - 1, j - 1, k, m) - f(i - 1, j - 1, k - 1, m)) * 0.25 / dx[2];
742[[nodiscard]] AMREX_FORCE_INLINE
745 const int& i,
const int& j,
const int& k,
747 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
750 ret(0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 0, dx, stencil));
751#if AMREX_SPACEDIM > 1
752 ret(0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 0, dx, stencil));
753 ret(1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 1, dx, stencil));
754 ret(1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 1, dx, stencil));
755#if AMREX_SPACEDIM > 2
756 ret(0, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 0, dx, stencil));
757 ret(2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 2, dx, stencil));
758 ret(1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 1, dx, stencil));
759 ret(2, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 2, dx, stencil));
760 ret(2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 2, dx, stencil));
766[[nodiscard]] AMREX_FORCE_INLINE
769 const int& i,
const int& j,
const int& k,
771 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
775#if AMREX_SPACEDIM > 0
778#if AMREX_SPACEDIM > 1
781#if AMREX_SPACEDIM > 2
788[[nodiscard]] AMREX_FORCE_INLINE
789std::pair<Set::Vector,Set::Matrix>
791 const int& i,
const int& j,
const int& k,
793 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
798 std::pair<Set::Scalar,Set::Vector> ret;
799#if AMREX_SPACEDIM > 0
802 offdiag.col(0) = ret.second;
804#if AMREX_SPACEDIM > 1
807 offdiag.col(1) = ret.second;
809#if AMREX_SPACEDIM > 2
812 offdiag.col(2) = ret.second;
814 return std::make_pair(diag,offdiag);
818[[nodiscard]] AMREX_FORCE_INLINE
821 const int& i,
const int& j,
const int& k,
825#if AMREX_SPACEDIM == 1
826 ret(0) = (f(i + 1, j, k) - f(i, j, k)) / dx[0];
827#elif AMREX_SPACEDIM == 2
828 ret(0) = (f(i + 1, j, k) - f(i, j, k) + f(i + 1, j + 1, k) - f(i, j + 1, k)) * 0.5 / dx[0];
829 ret(1) = (f(i, j + 1, k) - f(i, j, k) + f(i + 1, j + 1, k) - f(i + 1, j, k)) * 0.5 / dx[1];
830#elif AMREX_SPACEDIM == 3
831 ret(0) = (f(i + 1, j, k) - f(i, j, k) + f(i + 1, j + 1, k) - f(i, j + 1, k) + f(i + 1, j, k + 1) - f(i, j, k + 1) + f(i + 1, j + 1, k + 1) - f(i, j + 1, k + 1)) * 0.25 / dx[0];
832 ret(1) = (f(i, j + 1, k) - f(i, j, k) + f(i + 1, j + 1, k) - f(i + 1, j, k) + f(i, j + 1, k + 1) - f(i, j, k + 1) + f(i + 1, j + 1, k + 1) - f(i + 1, j, k + 1)) * 0.25 / dx[1];
833 ret(2) = (f(i, j, k + 1) - f(i, j, k) + f(i, j + 1, k + 1) - f(i, j + 1, k) + f(i + 1, j, k + 1) - f(i + 1, j, k) + f(i + 1, j + 1, k + 1) - f(i + 1, j + 1, k)) * 0.25 / dx[2];
838[[nodiscard]] AMREX_FORCE_INLINE
841 const int& i,
const int& j,
const int& k,
845#if AMREX_SPACEDIM == 1
846 ret.col(0) = (f(i + 1, j, k) - f(i, j, k)) / dx[0];
847#elif AMREX_SPACEDIM == 2
848 ret.col(0) = (f(i + 1, j, k) - f(i, j, k) + f(i + 1, j + 1, k) - f(i, j + 1, k)) * 0.5 / dx[0];
849 ret.col(1) = (f(i, j + 1, k) - f(i, j, k) + f(i + 1, j + 1, k) - f(i + 1, j, k)) * 0.5 / dx[1];
850#elif AMREX_SPACEDIM == 3
851 ret.col(0) = (f(i + 1, j, k) - f(i, j, k) + f(i + 1, j + 1, k) - f(i, j + 1, k) + f(i + 1, j, k + 1) - f(i, j, k + 1) + f(i + 1, j + 1, k + 1) - f(i, j + 1, k + 1)) * 0.25 / dx[0];
852 ret.col(1) = (f(i, j + 1, k) - f(i, j, k) + f(i + 1, j + 1, k) - f(i + 1, j, k) + f(i, j + 1, k + 1) - f(i, j, k + 1) + f(i + 1, j + 1, k + 1) - f(i + 1, j, k + 1)) * 0.25 / dx[1];
853 ret.col(2) = (f(i, j, k + 1) - f(i, j, k) + f(i, j + 1, k + 1) - f(i, j + 1, k) + f(i + 1, j, k + 1) - f(i + 1, j, k) + f(i + 1, j + 1, k + 1) - f(i + 1, j + 1, k)) * 0.25 / dx[2];
858[[nodiscard]] AMREX_FORCE_INLINE
861 const int& i,
const int& j,
const int& k,
const int& m,
865#if AMREX_SPACEDIM == 1
866 ret(0) = (f(i + 1, j, k, m) - f(i, j, k, m)) / dx[0];
867#elif AMREX_SPACEDIM == 2
868 ret(0) = 0.5 * (f(i + 1, j + 1, k, m) - f(i, j + 1, k, m) + f(i + 1, j, k, m) - f(i, j, k, m)) / dx[0];
869 ret(1) = 0.5 * (f(i + 1, j + 1, k, m) - f(i + 1, j, k, m) + f(i, j + 1, k, m) - f(i, j, k, m)) / dx[1];
870#elif AMREX_SPACEDIM == 3
871 ret(0) = 0.25 * (f(i + 1, j + 1, k + 1, m) - f(i, j + 1, k + 1, m) + f(i + 1, j, k + 1, m) - f(i, j, k + 1, m) + f(i + 1, j + 1, k, m) - f(i, j + 1, k, m) + f(i + 1, j, k, m) - f(i, j, k, m)) / dx[0];
872 ret(1) = 0.25 * (f(i + 1, j + 1, k + 1, m) - f(i + 1, j, k + 1, m) + f(i, j + 1, k + 1, m) - f(i, j, k + 1, m) + f(i + 1, j + 1, k, m) - f(i + 1, j, k, m) + f(i, j + 1, k, m) - f(i, j, k, m)) / dx[1];
873 ret(2) = 0.25 * (f(i + 1, j + 1, k + 1, m) - f(i + 1, j + 1, k, m) + f(i, j + 1, k + 1, m) - f(i, j + 1, k, m) + f(i + 1, j, k + 1, m) - f(i + 1, j, k, m) + f(i, j, k + 1, m) - f(i, j, k, m)) / dx[2];
878[[nodiscard]] AMREX_FORCE_INLINE
881 const int& i,
const int& j,
const int& k,
883 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
887#if AMREX_SPACEDIM > 0
890#if AMREX_SPACEDIM > 1
893#if AMREX_SPACEDIM > 2
901[[nodiscard]] AMREX_FORCE_INLINE
902std::array<T,AMREX_SPACEDIM>
904 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType);
907[[nodiscard]] AMREX_FORCE_INLINE
908std::array<Set::Matrix,AMREX_SPACEDIM>
910 std::array<StencilType, AMREX_SPACEDIM> stencil)
913 std::array<Set::Matrix,AMREX_SPACEDIM> gradu;
921 for (
int p = 0; p < AMREX_SPACEDIM; p++)
922 for (
int q = 0; q < AMREX_SPACEDIM; q++)
925 gradu[p](q, 0) = ((!xmax ? 0.0 : (p == q ? 1.0 : 0.0)) - (!xmin ? 0.0 : (p == q ? 1.0 : 0.0))) / ((xmin || xmax ? 1.0 : 2.0) * dx[0]);,
926 gradu[p](q, 1) = ((!ymax ? 0.0 : (p == q ? 1.0 : 0.0)) - (!ymin ? 0.0 : (p == q ? 1.0 : 0.0))) / ((ymin || ymax ? 1.0 : 2.0) * dx[1]);,
927 gradu[p](q, 2) = ((!zmax ? 0.0 : (p == q ? 1.0 : 0.0)) - (!zmin ? 0.0 : (p == q ? 1.0 : 0.0))) / ((zmin || zmax ? 1.0 : 2.0) * dx[2]););
933[[nodiscard]] AMREX_FORCE_INLINE
934std::array<Set::Matrix3,AMREX_SPACEDIM>
936 std::array<StencilType, AMREX_SPACEDIM> stencil)
942 std::array<Set::Matrix3,AMREX_SPACEDIM> gradgradu;
944 for (
int p = 0; p < AMREX_SPACEDIM; p++)
945 for (
int q = 0; q < AMREX_SPACEDIM; q++)
949 gradgradu[p](q, 0, 0) = (p == q ? -2.0 : 0.0) / dx[0] / dx[0];
951 gradgradu[p](q, 0, 1) = 0.0;
952 gradgradu[p](q, 1, 0) = 0.0;
953 gradgradu[p](q, 1, 1) = (p == q ? -2.0 : 0.0) / dx[1] / dx[1];
955 gradgradu[p](q, 0, 2) = 0.0;
956 gradgradu[p](q, 1, 2) = 0.0;
957 gradgradu[p](q, 2, 0) = 0.0;
958 gradgradu[p](q, 2, 1) = 0.0;
959 gradgradu[p](q, 2, 2) = (p == q ? -2.0 : 0.0) / dx[2] / dx[2]);
967[[nodiscard]] AMREX_FORCE_INLINE
970 const int& i,
const int& j,
const int& k,
975#if AMREX_SPACEDIM > 0
976 ret[0] = (f(i+1,j,k) - f(i,j,k)) / dx[0];
978#if AMREX_SPACEDIM > 1
979 ret[1] = (f(i,j+1,k) - f(i,j,k)) / dx[1];
981#if AMREX_SPACEDIM > 2
982 ret[2] = (f(i,j,k+1) - f(i,j,k)) / dx[2];
989[[nodiscard]] AMREX_FORCE_INLINE
992 const int& i,
const int& j,
const int& k,
994 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
997#if AMREX_SPACEDIM == 1
998 ret[0](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 0, dx, stencil));
999#elif AMREX_SPACEDIM == 2
1000 ret[0](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 0, dx, stencil));
1001 ret[0](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 0, dx, stencil));
1002 ret[0](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 1, dx, stencil));
1003 ret[0](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 1, dx, stencil));
1004 ret[1](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 2, dx, stencil));
1005 ret[1](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 2, dx, stencil));
1006 ret[1](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 3, dx, stencil));
1007 ret[1](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 3, dx, stencil));
1008#elif AMREX_SPACEDIM == 3
1009 ret[0](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 0, dx, stencil));
1010 ret[0](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 1, dx, stencil));
1011 ret[0](2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 2, dx, stencil));
1012 ret[1](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 3, dx, stencil));
1013 ret[1](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 4, dx, stencil));
1014 ret[1](2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 5, dx, stencil));
1015 ret[2](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 6, dx, stencil));
1016 ret[2](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 7, dx, stencil));
1017 ret[2](2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 8, dx, stencil));
1018 ret[0](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 0, dx, stencil));
1019 ret[0](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 1, dx, stencil));
1020 ret[0](2, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 2, dx, stencil));
1021 ret[1](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 3, dx, stencil));
1022 ret[1](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 4, dx, stencil));
1023 ret[1](2, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 5, dx, stencil));
1024 ret[2](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 6, dx, stencil));
1025 ret[2](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 7, dx, stencil));
1026 ret[2](2, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 8, dx, stencil));
1027 ret[0](0, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 0, dx, stencil));
1028 ret[0](1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 1, dx, stencil));
1029 ret[0](2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 2, dx, stencil));
1030 ret[1](0, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 3, dx, stencil));
1031 ret[1](1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 4, dx, stencil));
1032 ret[1](2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 5, dx, stencil));
1033 ret[2](0, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 6, dx, stencil));
1034 ret[2](1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 7, dx, stencil));
1035 ret[2](2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 8, dx, stencil));
1041[[nodiscard]] AMREX_FORCE_INLINE
1044 const int& i,
const int& j,
const int& k,
const int& m,
1046 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType
1050 ret(0, 0) = (
Numeric::Stencil<Set::Scalar, 2, 0, 0>::D(f, i, j, k, m, dx, stencil));
1051#if AMREX_SPACEDIM > 1
1052 ret(1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 2, 0>::D(f, i, j, k, m, dx, stencil));
1053 ret(0, 1) = (
Numeric::Stencil<Set::Scalar, 1, 1, 0>::D(f, i, j, k, m, dx, stencil));
1054 ret(1, 0) = ret(0, 1);
1055#if AMREX_SPACEDIM > 2
1056 ret(2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 2>::D(f, i, j, k, m, dx, stencil));
1057 ret(1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 1, 1>::D(f, i, j, k, m, dx, stencil));
1058 ret(2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 1>::D(f, i, j, k, m, dx, stencil));
1059 ret(2, 1) = ret(1, 2);
1060 ret(0, 2) = ret(2, 0);
1066[[nodiscard]] AMREX_FORCE_INLINE
1069 const int& i,
const int& j,
const int& k,
1071 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
1076 ret(0, 0, 0) = (
Numeric::Stencil<Set::Scalar, 2, 0, 0>::D(f, i, j, k, 0, DX, stencil));
1080 ret(0, 0, 1) = (
Numeric::Stencil<Set::Scalar, 1, 1, 0>::D(f, i, j, k, 0, DX, stencil));
1081 ret(0, 1, 0) = ret(0, 0, 1);
1082 ret(0, 1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 2, 0>::D(f, i, j, k, 0, DX, stencil));
1083 ret(1, 0, 0) = (
Numeric::Stencil<Set::Scalar, 2, 0, 0>::D(f, i, j, k, 1, DX, stencil));
1084 ret(1, 0, 1) = (
Numeric::Stencil<Set::Scalar, 1, 1, 0>::D(f, i, j, k, 1, DX, stencil));
1085 ret(1, 1, 0) = ret(1, 0, 1);
1086 ret(1, 1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 2, 0>::D(f, i, j, k, 1, DX, stencil));
1090 ret(0, 2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 2>::D(f, i, j, k, 0, DX, stencil));
1091 ret(0, 0, 2) = (
Numeric::Stencil<Set::Scalar, 1, 0, 1>::D(f, i, j, k, 0, DX, stencil));
1092 ret(0, 1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 1, 1>::D(f, i, j, k, 0, DX, stencil));
1093 ret(0, 2, 0) = ret(0, 0, 2);
1094 ret(0, 2, 1) = ret(0, 1, 2);;
1095 ret(1, 2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 2>::D(f, i, j, k, 1, DX, stencil));
1096 ret(1, 0, 2) = (
Numeric::Stencil<Set::Scalar, 1, 0, 1>::D(f, i, j, k, 1, DX, stencil));
1097 ret(1, 1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 1, 1>::D(f, i, j, k, 1, DX, stencil));
1098 ret(1, 2, 0) = ret(1, 0, 2);
1099 ret(1, 2, 1) = ret(1, 1, 2);;
1100 ret(2, 0, 0) = (
Numeric::Stencil<Set::Scalar, 2, 0, 0>::D(f, i, j, k, 2, DX, stencil));
1101 ret(2, 1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 2, 0>::D(f, i, j, k, 2, DX, stencil));
1102 ret(2, 2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 2>::D(f, i, j, k, 2, DX, stencil));
1103 ret(2, 0, 1) = (
Numeric::Stencil<Set::Scalar, 1, 1, 0>::D(f, i, j, k, 2, DX, stencil));
1104 ret(2, 1, 0) = ret(2, 0, 1);
1105 ret(2, 0, 2) = (
Numeric::Stencil<Set::Scalar, 1, 0, 1>::D(f, i, j, k, 2, DX, stencil));
1106 ret(2, 1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 1, 1>::D(f, i, j, k, 2, DX, stencil));
1107 ret(2, 2, 0) = ret(2, 0, 2);
1108 ret(2, 2, 1) = ret(2, 1, 2);;
1116[[nodiscard]] AMREX_FORCE_INLINE
1119 const int& i,
const int& j,
const int& k,
1121 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
1127 ret[0](0, 0) = f_11(0);
1130 ret[1](0, 0) = f_11(1);
1132 ret[0](1, 0) = ret[0](0, 1) = f_12(0);
1133 ret[1](1, 0) = ret[1](0, 1) = f_12(1);
1135 ret[0](1, 1) = f_22(0);
1136 ret[1](1, 1) = f_22(1);
1139 ret[2](0, 0) = f_11(2);
1140 ret[2](1, 0) = ret[2](0, 1) = f_12(2);
1142 ret[0](2, 0) = ret[0](0, 2) = f_13(0);
1143 ret[1](2, 0) = ret[1](0, 2) = f_13(1);
1144 ret[2](2, 0) = ret[2](0, 2) = f_13(2);
1145 ret[2](1, 1) = f_22(2);
1147 ret[0](1, 2) = ret[0](2, 1) = f_23(0);
1148 ret[1](1, 2) = ret[1](2, 1) = f_23(1);
1149 ret[2](1, 2) = ret[2](2, 1) = f_23(2);
1151 ret[0](2, 2) = f_33(0);
1152 ret[1](2, 2) = f_33(1);
1153 ret[2](2, 2) = f_33(2);
1159[[nodiscard]] AMREX_FORCE_INLINE
1162 const int& i,
const int& j,
const int& k)
1165#if AMREX_SPACEDIM == 1
1166 ret(0, 0) = f(i, j, k, 0);
1168#elif AMREX_SPACEDIM == 2
1169 ret(0, 0) = f(i, j, k, 0); ret(0, 1) = f(i, j, k, 1);
1170 ret(1, 0) = f(i, j, k, 2); ret(1, 1) = f(i, j, k, 3);
1172#elif AMREX_SPACEDIM == 3
1173 ret(0, 0) = f(i, j, k, 0); ret(0, 1) = f(i, j, k, 1); ret(0, 2) = f(i, j, k, 2);
1174 ret(1, 0) = f(i, j, k, 3); ret(1, 1) = f(i, j, k, 4); ret(1, 2) = f(i, j, k, 5);
1175 ret(2, 0) = f(i, j, k, 6); ret(2, 1) = f(i, j, k, 7); ret(2, 2) = f(i, j, k, 8);
1181[[nodiscard]] AMREX_FORCE_INLINE
1184 const int& i,
const int& j,
const int& k)
1187#if AMREX_SPACEDIM == 1
1188 ret(0, 0) = f(i, j, k, 0);
1190#elif AMREX_SPACEDIM == 2
1191 ret(0, 0) = f(i, j, k, 0); ret(0, 1) = f(i, j, k, 1);
1192 ret(1, 0) = f(i, j, k, 2); ret(1, 1) = f(i, j, k, 3);
1194#elif AMREX_SPACEDIM == 3
1195 ret(0, 0) = f(i, j, k, 0); ret(0, 1) = f(i, j, k, 1); ret(0, 2) = f(i, j, k, 2);
1196 ret(1, 0) = f(i, j, k, 3); ret(1, 1) = f(i, j, k, 4); ret(1, 2) = f(i, j, k, 5);
1197 ret(2, 0) = f(i, j, k, 6); ret(2, 1) = f(i, j, k, 7); ret(2, 2) = f(i, j, k, 8);
1203[[nodiscard]] AMREX_FORCE_INLINE
1206 const int& i,
const int& j,
const int& k)
1209 ret(0) = f(i, j, k, 0);
1210#if AMREX_SPACEDIM > 1
1211 ret(1) = f(i, j, k, 1);
1212#if AMREX_SPACEDIM > 2
1213 ret(2) = f(i, j, k, 2);
1219[[nodiscard]] AMREX_FORCE_INLINE
1222 const int& i,
const int& j,
const int& k)
1225 ret(0) = f(i, j, k, 0);
1226#if AMREX_SPACEDIM > 1
1227 ret(1) = f(i, j, k, 1);
1228#if AMREX_SPACEDIM > 2
1229 ret(2) = f(i, j, k, 2);
1238 const int& i,
const int& j,
const int& k,
1241#if AMREX_SPACEDIM == 1
1242 f(i, j, k, 0) = matrix(0, 0);
1243#elif AMREX_SPACEDIM == 2
1244 f(i, j, k, 0) = matrix(0, 0); f(i, j, k, 1) = matrix(0, 1);
1245 f(i, j, k, 2) = matrix(1, 0); f(i, j, k, 3) = matrix(1, 1);
1246#elif AMREX_SPACEDIM == 3
1247 f(i, j, k, 0) = matrix(0, 0); f(i, j, k, 1) = matrix(0, 1); f(i, j, k, 2) = matrix(0, 2);
1248 f(i, j, k, 3) = matrix(1, 0); f(i, j, k, 4) = matrix(1, 1); f(i, j, k, 5) = matrix(1, 2);
1249 f(i, j, k, 6) = matrix(2, 0); f(i, j, k, 7) = matrix(2, 1); f(i, j, k, 8) = matrix(2, 2);
1256 const int& i,
const int& j,
const int& k,
1259 f(i, j, k, 0) = vector(0);
1260#if AMREX_SPACEDIM > 1
1261 f(i, j, k, 1) = vector(1);
1262#if AMREX_SPACEDIM > 2
1263 f(i, j, k, 2) = vector(2);
1268template<
int index,
int SYM>
1272 const int,
const int,
const int,
const Set::Scalar[AMREX_SPACEDIM],
1273 std::array<StencilType, AMREX_SPACEDIM> =
DefaultType)
1279[[nodiscard]] AMREX_FORCE_INLINE
1281 const int i,
const int j,
const int k,
const Set::Scalar dx[AMREX_SPACEDIM],
1282 std::array<StencilType, AMREX_SPACEDIM> stencil)
1287 Numeric::Stencil<Set::Matrix4<AMREX_SPACEDIM, Set::Sym::Isotropic>, 1, 0, 0>::D(C, i, j, k, 0, dx, stencil);
1290 Numeric::Stencil<Set::Matrix4<AMREX_SPACEDIM, Set::Sym::Isotropic>, 0, 1, 0>::D(C, i, j, k, 0, dx, stencil);
1294 Numeric::Stencil<Set::Matrix4<AMREX_SPACEDIM, Set::Sym::Isotropic>, 0, 0, 1>::D(C, i, j, k, 0, dx, stencil);
1297 for (
int i = 0; i < AMREX_SPACEDIM; i++)
1298 for (
int k = 0; k < AMREX_SPACEDIM; k++)
1299 for (
int l = 0; l < AMREX_SPACEDIM; l++)
1302 ret(i, k, l) = gradCx(i, 0, k, l);
1304 ret(i, k, l) = gradCy(i, 1, k, l);
1307 ret(i, k, l) = gradCz(i, 2, k, l);
1317[[nodiscard]] AMREX_FORCE_INLINE
1320 const int& i,
const int& j,
const int& k,
const int& m,
1324[[nodiscard]] AMREX_FORCE_INLINE
1327 const int& i,
const int& j,
const int& k,
const int& m,
1332 ret(0, 0, 0, 0) =
Stencil<Set::Scalar, 4, 0, 0>::D(f, i, j, k, m, dx);
1334 ret(0, 0, 0, 1) =
Stencil<Set::Scalar, 3, 1, 0>::D(f, i, j, k, m, dx);
1336 ret(0, 0, 1, 1) =
Stencil<Set::Scalar, 2, 2, 0>::D(f, i, j, k, m, dx);
1338 ret(0, 1, 1, 1) =
Stencil<Set::Scalar, 1, 3, 0>::D(f, i, j, k, m, dx);
1340 ret(1, 1, 1, 1) =
Stencil<Set::Scalar, 0, 4, 0>::D(f, i, j, k, m, dx);
1345[[nodiscard]] AMREX_FORCE_INLINE
1348 const int& i,
const int& j,
const int& k,
const int& m,
1353 ret(0, 0, 0, 0) =
Stencil<Set::Scalar, 4, 0, 0>::D(f, i, j, k, m, dx);
1355 ret(0, 0, 0, 1) =
Stencil<Set::Scalar, 3, 1, 0>::D(f, i, j, k, m, dx);
1357 ret(0, 0, 0, 2) =
Stencil<Set::Scalar, 3, 0, 1>::D(f, i, j, k, m, dx);
1359 ret(0, 0, 1, 1) =
Stencil<Set::Scalar, 2, 2, 0>::D(f, i, j, k, m, dx);
1361 ret(0, 0, 1, 2) =
Stencil<Set::Scalar, 2, 1, 1>::D(f, i, j, k, m, dx);
1363 ret(0, 0, 2, 2) =
Stencil<Set::Scalar, 2, 0, 2>::D(f, i, j, k, m, dx);
1365 ret(0, 1, 1, 1) =
Stencil<Set::Scalar, 1, 3, 0>::D(f, i, j, k, m, dx);
1367 ret(0, 1, 1, 2) =
Stencil<Set::Scalar, 1, 2, 1>::D(f, i, j, k, m, dx);
1369 ret(0, 1, 2, 2) =
Stencil<Set::Scalar, 1, 1, 2>::D(f, i, j, k, m, dx);
1371 ret(0, 2, 2, 2) =
Stencil<Set::Scalar, 1, 0, 3>::D(f, i, j, k, m, dx);
1373 ret(1, 1, 1, 1) =
Stencil<Set::Scalar, 0, 4, 0>::D(f, i, j, k, m, dx);
1375 ret(1, 1, 1, 2) =
Stencil<Set::Scalar, 0, 3, 1>::D(f, i, j, k, m, dx);
1377 ret(1, 1, 2, 2) =
Stencil<Set::Scalar, 0, 2, 2>::D(f, i, j, k, m, dx);
1379 ret(1, 2, 2, 2) =
Stencil<Set::Scalar, 0, 1, 3>::D(f, i, j, k, m, dx);
1381 ret(2, 2, 2, 2) =
Stencil<Set::Scalar, 0, 0, 4>::D(f, i, j, k, m, dx);
1389 [[nodiscard]] AMREX_FORCE_INLINE
1391 const int& i,
const int& j,
const int& k,
const int& m,
1392 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
1399 return (AMREX_D_TERM(f(i, j, k, m) + f(i - ilo, j, k, m)
1401 +f(i, j - jlo, k, m) + f(i - ilo, j - jlo, k, m)
1403 +f(i, j, k - klo, m) + f(i - ilo, j, k - klo, m)
1404 + f(i, j - jlo, k - klo, m) + f(i - ilo, j - jlo, k - klo, m)
1408 [[nodiscard]] AMREX_FORCE_INLINE
1410 const int& i,
const int& j,
const int& k,
const int& m,
1411 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
1418 return (AMREX_D_TERM(f(i, j, k, m) + f(i - ilo, j, k, m)
1420 +f(i, j - jlo, k, m) + f(i - ilo, j - jlo, k, m)
1422 +f(i, j, k - klo, m) + f(i - ilo, j, k - klo, m)
1423 + f(i, j - jlo, k - klo, m) + f(i - ilo, j - jlo, k - klo, m)
1427 [[nodiscard]] AMREX_FORCE_INLINE
1429 const int& i,
const int& j,
const int& k,
const int& m)
1431 return (AMREX_D_TERM(f(i, j, k, m) + f(i + 1, j, k, m)
1433 +f(i, j + 1, k, m) + f(i + 1, j + 1, k, m)
1435 +f(i, j, k + 1, m) + f(i + 1, j, k + 1, m)
1436 + f(i, j + 1, k + 1, m) + f(i + 1, j + 1, k + 1, m)
1440 [[nodiscard]] AMREX_FORCE_INLINE
1442 const int& i,
const int& j,
const int& k,
const int& m)
1444 return (AMREX_D_TERM(f(i, j, k, m) + f(i + 1, j, k, m)
1446 +f(i, j + 1, k, m) + f(i + 1, j + 1, k, m)
1448 +f(i, j, k + 1, m) + f(i + 1, j, k + 1, m)
1449 + f(i, j + 1, k + 1, m) + f(i + 1, j + 1, k + 1, m)
This namespace contains some numerical tools.
AMREX_FORCE_INLINE Set::Matrix FieldToMatrix(const amrex::Array4< const Set::Scalar > &f, const int &i, const int &j, const int &k)
AMREX_FORCE_INLINE Set::Scalar Laplacian(const amrex::Array4< const Set::Scalar > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > &stencil=DefaultType)
AMREX_FORCE_INLINE Set::Matrix4< 2, Set::Sym::Full > DoubleHessian< 2 >(const amrex::Array4< const Set::Scalar > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])
AMREX_FORCE_INLINE Set::Matrix3 Divergence< 2, Set::Sym::Isotropic >(const amrex::Array4< const Set::Matrix4< AMREX_SPACEDIM, Set::Sym::Isotropic > > &C, const int i, const int j, const int k, const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil)
AMREX_FORCE_INLINE void VectorToField(const amrex::Array4< Set::Scalar > &f, const int &i, const int &j, const int &k, Set::Vector vector)
static std::array< StencilType, AMREX_SPACEDIM > DefaultType
AMREX_FORCE_INLINE Set::Matrix4< dim, Set::Sym::Full > DoubleHessian(const amrex::Array4< const Set::Scalar > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])
static std::array< StencilType, AMREX_SPACEDIM > XHi
AMREX_FORCE_INLINE Set::Matrix3 MatrixGradient(const amrex::Array4< const Set::Scalar > &f, const int &i, const int &j, const int &k, const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
static AMREX_FORCE_INLINE std::array< StencilType, AMREX_SPACEDIM > GetStencil(const int i, const int j, const int k, const amrex::Box domain)
AMREX_FORCE_INLINE Set::Vector NodeGradientOnCell(const amrex::Array4< const Set::Scalar > &f, const int &i, const int &j, const int &k, const Set::Scalar dx[AMREX_SPACEDIM])
static std::array< StencilType, AMREX_SPACEDIM > XLo
AMREX_FORCE_INLINE Set::Vector FieldToVector(const amrex::Array4< const Set::Scalar > &f, const int &i, const int &j, const int &k)
AMREX_FORCE_INLINE void MatrixToField(const amrex::Array4< Set::Scalar > &f, const int &i, const int &j, const int &k, Set::Matrix matrix)
AMREX_FORCE_INLINE Set::Vector CellGradientOnNode(const amrex::Array4< const Set::Scalar > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])
AMREX_FORCE_INLINE Set::Matrix Hessian(const amrex::Array4< const Set::Scalar > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
AMREX_FORCE_INLINE std::array< T, AMREX_SPACEDIM > Gradient_Diagonal(const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
AMREX_FORCE_INLINE Set::Matrix4< 3, Set::Sym::Full > DoubleHessian< 3 >(const amrex::Array4< const Set::Scalar > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])
AMREX_FORCE_INLINE Set::Vector Gradient(const amrex::Array4< const Set::Scalar > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
AMREX_FORCE_INLINE Set::Vector Divergence(const amrex::Array4< const Set::Matrix > &dw, const int &i, const int &j, const int &k, const Set::Scalar DX[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > &stencil=DefaultType)
AMREX_FORCE_INLINE std::pair< Set::Vector, Set::Matrix > GradientSplit(const amrex::Array4< const Set::Vector > &f, const int &i, const int &j, const int &k, const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, 1 > Vector
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, AMREX_SPACEDIM > Matrix
void Abort(const char *msg)
AMREX_FORCE_INLINE void Assert(std::string file, std::string func, int line, std::string smt, bool pass, Args const &... args)
static constexpr Set::Scalar fac
static AMREX_FORCE_INLINE T CellToNodeAverage(const amrex::Array4< T > &f, const int &i, const int &j, const int &k, const int &m, std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
static AMREX_FORCE_INLINE T NodeToCellAverage(const amrex::Array4< T > &f, const int &i, const int &j, const int &k, const int &m)
static AMREX_FORCE_INLINE T NodeToCellAverage(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m)
static AMREX_FORCE_INLINE T CellToNodeAverage(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
static AMREX_FORCE_INLINE std::pair< Set::Scalar, T > Dsplit(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
static AMREX_FORCE_INLINE std::pair< Set::Scalar, T > Dsplit(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
static AMREX_FORCE_INLINE std::pair< Set::Scalar, T > Dsplit(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])
static AMREX_FORCE_INLINE T D(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, const Set::Scalar dx[AMREX_SPACEDIM])