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
899[[nodiscard]] AMREX_FORCE_INLINE
902 const int& i,
const int& j,
const int& k,
907#if AMREX_SPACEDIM > 0
908 ret[0] = (f(i+1,j,k) - f(i,j,k)) / dx[0];
910#if AMREX_SPACEDIM > 1
911 ret[1] = (f(i,j+1,k) - f(i,j,k)) / dx[1];
913#if AMREX_SPACEDIM > 2
914 ret[2] = (f(i,j,k+1) - f(i,j,k)) / dx[2];
921[[nodiscard]] AMREX_FORCE_INLINE
924 const int& i,
const int& j,
const int& k,
926 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
929#if AMREX_SPACEDIM == 1
930 ret[0](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 0, dx, stencil));
931#elif AMREX_SPACEDIM == 2
932 ret[0](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 0, dx, stencil));
933 ret[0](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 0, dx, stencil));
934 ret[0](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 1, dx, stencil));
935 ret[0](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 1, dx, stencil));
936 ret[1](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 2, dx, stencil));
937 ret[1](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 2, dx, stencil));
938 ret[1](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 3, dx, stencil));
939 ret[1](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 3, dx, stencil));
940#elif AMREX_SPACEDIM == 3
941 ret[0](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 0, dx, stencil));
942 ret[0](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 1, dx, stencil));
943 ret[0](2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 2, dx, stencil));
944 ret[1](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 3, dx, stencil));
945 ret[1](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 4, dx, stencil));
946 ret[1](2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 5, dx, stencil));
947 ret[2](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 6, dx, stencil));
948 ret[2](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 7, dx, stencil));
949 ret[2](2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 8, dx, stencil));
950 ret[0](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 0, dx, stencil));
951 ret[0](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 1, dx, stencil));
952 ret[0](2, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 2, dx, stencil));
953 ret[1](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 3, dx, stencil));
954 ret[1](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 4, dx, stencil));
955 ret[1](2, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 5, dx, stencil));
956 ret[2](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 6, dx, stencil));
957 ret[2](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 7, dx, stencil));
958 ret[2](2, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 8, dx, stencil));
959 ret[0](0, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 0, dx, stencil));
960 ret[0](1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 1, dx, stencil));
961 ret[0](2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 2, dx, stencil));
962 ret[1](0, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 3, dx, stencil));
963 ret[1](1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 4, dx, stencil));
964 ret[1](2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 5, dx, stencil));
965 ret[2](0, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 6, dx, stencil));
966 ret[2](1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 7, dx, stencil));
967 ret[2](2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 8, dx, stencil));
973[[nodiscard]] AMREX_FORCE_INLINE
975Hessian(
const amrex::Array4<const Set::Scalar>& f,
976 const int& i,
const int& j,
const int& k,
const int& m,
978 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType
982 ret(0, 0) = (
Numeric::Stencil<Set::Scalar, 2, 0, 0>::D(f, i, j, k, m, dx, stencil));
983#if AMREX_SPACEDIM > 1
984 ret(1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 2, 0>::D(f, i, j, k, m, dx, stencil));
985 ret(0, 1) = (
Numeric::Stencil<Set::Scalar, 1, 1, 0>::D(f, i, j, k, m, dx, stencil));
986 ret(1, 0) = ret(0, 1);
987#if AMREX_SPACEDIM > 2
988 ret(2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 2>::D(f, i, j, k, m, dx, stencil));
989 ret(1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 1, 1>::D(f, i, j, k, m, dx, stencil));
990 ret(2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 1>::D(f, i, j, k, m, dx, stencil));
991 ret(2, 1) = ret(1, 2);
992 ret(0, 2) = ret(2, 0);
998[[nodiscard]] AMREX_FORCE_INLINE
1001 const int& i,
const int& j,
const int& k,
1003 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
1008 ret(0, 0, 0) = (
Numeric::Stencil<Set::Scalar, 2, 0, 0>::D(f, i, j, k, 0, DX, stencil));
1012 ret(0, 0, 1) = (
Numeric::Stencil<Set::Scalar, 1, 1, 0>::D(f, i, j, k, 0, DX, stencil));
1013 ret(0, 1, 0) = ret(0, 0, 1);
1014 ret(0, 1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 2, 0>::D(f, i, j, k, 0, DX, stencil));
1015 ret(1, 0, 0) = (
Numeric::Stencil<Set::Scalar, 2, 0, 0>::D(f, i, j, k, 1, DX, stencil));
1016 ret(1, 0, 1) = (
Numeric::Stencil<Set::Scalar, 1, 1, 0>::D(f, i, j, k, 1, DX, stencil));
1017 ret(1, 1, 0) = ret(1, 0, 1);
1018 ret(1, 1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 2, 0>::D(f, i, j, k, 1, DX, stencil));
1022 ret(0, 2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 2>::D(f, i, j, k, 0, DX, stencil));
1023 ret(0, 0, 2) = (
Numeric::Stencil<Set::Scalar, 1, 0, 1>::D(f, i, j, k, 0, DX, stencil));
1024 ret(0, 1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 1, 1>::D(f, i, j, k, 0, DX, stencil));
1025 ret(0, 2, 0) = ret(0, 0, 2);
1026 ret(0, 2, 1) = ret(0, 1, 2);;
1027 ret(1, 2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 2>::D(f, i, j, k, 1, DX, stencil));
1028 ret(1, 0, 2) = (
Numeric::Stencil<Set::Scalar, 1, 0, 1>::D(f, i, j, k, 1, DX, stencil));
1029 ret(1, 1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 1, 1>::D(f, i, j, k, 1, DX, stencil));
1030 ret(1, 2, 0) = ret(1, 0, 2);
1031 ret(1, 2, 1) = ret(1, 1, 2);;
1032 ret(2, 0, 0) = (
Numeric::Stencil<Set::Scalar, 2, 0, 0>::D(f, i, j, k, 2, DX, stencil));
1033 ret(2, 1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 2, 0>::D(f, i, j, k, 2, DX, stencil));
1034 ret(2, 2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 2>::D(f, i, j, k, 2, DX, stencil));
1035 ret(2, 0, 1) = (
Numeric::Stencil<Set::Scalar, 1, 1, 0>::D(f, i, j, k, 2, DX, stencil));
1036 ret(2, 1, 0) = ret(2, 0, 1);
1037 ret(2, 0, 2) = (
Numeric::Stencil<Set::Scalar, 1, 0, 1>::D(f, i, j, k, 2, DX, stencil));
1038 ret(2, 1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 1, 1>::D(f, i, j, k, 2, DX, stencil));
1039 ret(2, 2, 0) = ret(2, 0, 2);
1040 ret(2, 2, 1) = ret(2, 1, 2);;
1048[[nodiscard]] AMREX_FORCE_INLINE
1051 const int& i,
const int& j,
const int& k,
1053 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
1059 ret[0](0, 0) = f_11(0);
1062 ret[1](0, 0) = f_11(1);
1064 ret[0](1, 0) = ret[0](0, 1) = f_12(0);
1065 ret[1](1, 0) = ret[1](0, 1) = f_12(1);
1067 ret[0](1, 1) = f_22(0);
1068 ret[1](1, 1) = f_22(1);
1071 ret[2](0, 0) = f_11(2);
1072 ret[2](1, 0) = ret[2](0, 1) = f_12(2);
1074 ret[0](2, 0) = ret[0](0, 2) = f_13(0);
1075 ret[1](2, 0) = ret[1](0, 2) = f_13(1);
1076 ret[2](2, 0) = ret[2](0, 2) = f_13(2);
1077 ret[2](1, 1) = f_22(2);
1079 ret[0](1, 2) = ret[0](2, 1) = f_23(0);
1080 ret[1](1, 2) = ret[1](2, 1) = f_23(1);
1081 ret[2](1, 2) = ret[2](2, 1) = f_23(2);
1083 ret[0](2, 2) = f_33(0);
1084 ret[1](2, 2) = f_33(1);
1085 ret[2](2, 2) = f_33(2);
1091[[nodiscard]] AMREX_FORCE_INLINE
1094 const int& i,
const int& j,
const int& k)
1097#if AMREX_SPACEDIM == 1
1098 ret(0, 0) = f(i, j, k, 0);
1100#elif AMREX_SPACEDIM == 2
1101 ret(0, 0) = f(i, j, k, 0); ret(0, 1) = f(i, j, k, 1);
1102 ret(1, 0) = f(i, j, k, 2); ret(1, 1) = f(i, j, k, 3);
1104#elif AMREX_SPACEDIM == 3
1105 ret(0, 0) = f(i, j, k, 0); ret(0, 1) = f(i, j, k, 1); ret(0, 2) = f(i, j, k, 2);
1106 ret(1, 0) = f(i, j, k, 3); ret(1, 1) = f(i, j, k, 4); ret(1, 2) = f(i, j, k, 5);
1107 ret(2, 0) = f(i, j, k, 6); ret(2, 1) = f(i, j, k, 7); ret(2, 2) = f(i, j, k, 8);
1113[[nodiscard]] AMREX_FORCE_INLINE
1116 const int& i,
const int& j,
const int& k)
1119#if AMREX_SPACEDIM == 1
1120 ret(0, 0) = f(i, j, k, 0);
1122#elif AMREX_SPACEDIM == 2
1123 ret(0, 0) = f(i, j, k, 0); ret(0, 1) = f(i, j, k, 1);
1124 ret(1, 0) = f(i, j, k, 2); ret(1, 1) = f(i, j, k, 3);
1126#elif AMREX_SPACEDIM == 3
1127 ret(0, 0) = f(i, j, k, 0); ret(0, 1) = f(i, j, k, 1); ret(0, 2) = f(i, j, k, 2);
1128 ret(1, 0) = f(i, j, k, 3); ret(1, 1) = f(i, j, k, 4); ret(1, 2) = f(i, j, k, 5);
1129 ret(2, 0) = f(i, j, k, 6); ret(2, 1) = f(i, j, k, 7); ret(2, 2) = f(i, j, k, 8);
1135[[nodiscard]] AMREX_FORCE_INLINE
1138 const int& i,
const int& j,
const int& k)
1141 ret(0) = f(i, j, k, 0);
1142#if AMREX_SPACEDIM > 1
1143 ret(1) = f(i, j, k, 1);
1144#if AMREX_SPACEDIM > 2
1145 ret(2) = f(i, j, k, 2);
1151[[nodiscard]] AMREX_FORCE_INLINE
1154 const int& i,
const int& j,
const int& k)
1157 ret(0) = f(i, j, k, 0);
1158#if AMREX_SPACEDIM > 1
1159 ret(1) = f(i, j, k, 1);
1160#if AMREX_SPACEDIM > 2
1161 ret(2) = f(i, j, k, 2);
1170 const int& i,
const int& j,
const int& k,
1173#if AMREX_SPACEDIM == 1
1174 f(i, j, k, 0) = matrix(0, 0);
1175#elif AMREX_SPACEDIM == 2
1176 f(i, j, k, 0) = matrix(0, 0); f(i, j, k, 1) = matrix(0, 1);
1177 f(i, j, k, 2) = matrix(1, 0); f(i, j, k, 3) = matrix(1, 1);
1178#elif AMREX_SPACEDIM == 3
1179 f(i, j, k, 0) = matrix(0, 0); f(i, j, k, 1) = matrix(0, 1); f(i, j, k, 2) = matrix(0, 2);
1180 f(i, j, k, 3) = matrix(1, 0); f(i, j, k, 4) = matrix(1, 1); f(i, j, k, 5) = matrix(1, 2);
1181 f(i, j, k, 6) = matrix(2, 0); f(i, j, k, 7) = matrix(2, 1); f(i, j, k, 8) = matrix(2, 2);
1188 const int& i,
const int& j,
const int& k,
1191 f(i, j, k, 0) = vector(0);
1192#if AMREX_SPACEDIM > 1
1193 f(i, j, k, 1) = vector(1);
1194#if AMREX_SPACEDIM > 2
1195 f(i, j, k, 2) = vector(2);
1200template<
int index,
int SYM>
1204 const int,
const int,
const int,
const Set::Scalar[AMREX_SPACEDIM],
1205 std::array<StencilType, AMREX_SPACEDIM> =
DefaultType)
1211[[nodiscard]] AMREX_FORCE_INLINE
1213 const int i,
const int j,
const int k,
const Set::Scalar dx[AMREX_SPACEDIM],
1214 std::array<StencilType, AMREX_SPACEDIM> stencil)
1219 Numeric::Stencil<Set::Matrix4<AMREX_SPACEDIM, Set::Sym::Isotropic>, 1, 0, 0>::D(C, i, j, k, 0, dx, stencil);
1222 Numeric::Stencil<Set::Matrix4<AMREX_SPACEDIM, Set::Sym::Isotropic>, 0, 1, 0>::D(C, i, j, k, 0, dx, stencil);
1226 Numeric::Stencil<Set::Matrix4<AMREX_SPACEDIM, Set::Sym::Isotropic>, 0, 0, 1>::D(C, i, j, k, 0, dx, stencil);
1229 for (
int i = 0; i < AMREX_SPACEDIM; i++)
1230 for (
int k = 0; k < AMREX_SPACEDIM; k++)
1231 for (
int l = 0; l < AMREX_SPACEDIM; l++)
1234 ret(i, k, l) = gradCx(i, 0, k, l);
1236 ret(i, k, l) = gradCy(i, 1, k, l);
1239 ret(i, k, l) = gradCz(i, 2, k, l);
1249[[nodiscard]] AMREX_FORCE_INLINE
1252 const int& i,
const int& j,
const int& k,
const int& m,
1256[[nodiscard]] AMREX_FORCE_INLINE
1259 const int& i,
const int& j,
const int& k,
const int& m,
1264 ret(0, 0, 0, 0) =
Stencil<Set::Scalar, 4, 0, 0>::D(f, i, j, k, m, dx);
1266 ret(0, 0, 0, 1) =
Stencil<Set::Scalar, 3, 1, 0>::D(f, i, j, k, m, dx);
1268 ret(0, 0, 1, 1) =
Stencil<Set::Scalar, 2, 2, 0>::D(f, i, j, k, m, dx);
1270 ret(0, 1, 1, 1) =
Stencil<Set::Scalar, 1, 3, 0>::D(f, i, j, k, m, dx);
1272 ret(1, 1, 1, 1) =
Stencil<Set::Scalar, 0, 4, 0>::D(f, i, j, k, m, dx);
1277[[nodiscard]] AMREX_FORCE_INLINE
1280 const int& i,
const int& j,
const int& k,
const int& m,
1285 ret(0, 0, 0, 0) =
Stencil<Set::Scalar, 4, 0, 0>::D(f, i, j, k, m, dx);
1287 ret(0, 0, 0, 1) =
Stencil<Set::Scalar, 3, 1, 0>::D(f, i, j, k, m, dx);
1289 ret(0, 0, 0, 2) =
Stencil<Set::Scalar, 3, 0, 1>::D(f, i, j, k, m, dx);
1291 ret(0, 0, 1, 1) =
Stencil<Set::Scalar, 2, 2, 0>::D(f, i, j, k, m, dx);
1293 ret(0, 0, 1, 2) =
Stencil<Set::Scalar, 2, 1, 1>::D(f, i, j, k, m, dx);
1295 ret(0, 0, 2, 2) =
Stencil<Set::Scalar, 2, 0, 2>::D(f, i, j, k, m, dx);
1297 ret(0, 1, 1, 1) =
Stencil<Set::Scalar, 1, 3, 0>::D(f, i, j, k, m, dx);
1299 ret(0, 1, 1, 2) =
Stencil<Set::Scalar, 1, 2, 1>::D(f, i, j, k, m, dx);
1301 ret(0, 1, 2, 2) =
Stencil<Set::Scalar, 1, 1, 2>::D(f, i, j, k, m, dx);
1303 ret(0, 2, 2, 2) =
Stencil<Set::Scalar, 1, 0, 3>::D(f, i, j, k, m, dx);
1305 ret(1, 1, 1, 1) =
Stencil<Set::Scalar, 0, 4, 0>::D(f, i, j, k, m, dx);
1307 ret(1, 1, 1, 2) =
Stencil<Set::Scalar, 0, 3, 1>::D(f, i, j, k, m, dx);
1309 ret(1, 1, 2, 2) =
Stencil<Set::Scalar, 0, 2, 2>::D(f, i, j, k, m, dx);
1311 ret(1, 2, 2, 2) =
Stencil<Set::Scalar, 0, 1, 3>::D(f, i, j, k, m, dx);
1313 ret(2, 2, 2, 2) =
Stencil<Set::Scalar, 0, 0, 4>::D(f, i, j, k, m, dx);
1321 [[nodiscard]] AMREX_FORCE_INLINE
1323 const int& i,
const int& j,
const int& k,
const int& m,
1324 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
1331 return (AMREX_D_TERM(f(i, j, k, m) + f(i - ilo, j, k, m)
1333 +f(i, j - jlo, k, m) + f(i - ilo, j - jlo, k, m)
1335 +f(i, j, k - klo, m) + f(i - ilo, j, k - klo, m)
1336 + f(i, j - jlo, k - klo, m) + f(i - ilo, j - jlo, k - klo, m)
1340 [[nodiscard]] AMREX_FORCE_INLINE
1342 const int& i,
const int& j,
const int& k,
const int& m,
1343 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
1350 return (AMREX_D_TERM(f(i, j, k, m) + f(i - ilo, j, k, m)
1352 +f(i, j - jlo, k, m) + f(i - ilo, j - jlo, k, m)
1354 +f(i, j, k - klo, m) + f(i - ilo, j, k - klo, m)
1355 + f(i, j - jlo, k - klo, m) + f(i - ilo, j - jlo, k - klo, m)
1359 [[nodiscard]] AMREX_FORCE_INLINE
1361 const int& i,
const int& j,
const int& k,
const int& m)
1363 return (AMREX_D_TERM(f(i, j, k, m) + f(i + 1, j, k, m)
1365 +f(i, j + 1, k, m) + f(i + 1, j + 1, k, m)
1367 +f(i, j, k + 1, m) + f(i + 1, j, k + 1, m)
1368 + f(i, j + 1, k + 1, m) + f(i + 1, j + 1, k + 1, m)
1372 [[nodiscard]] AMREX_FORCE_INLINE
1374 const int& i,
const int& j,
const int& k,
const int& m)
1376 return (AMREX_D_TERM(f(i, j, k, m) + f(i + 1, j, k, m)
1378 +f(i, j + 1, k, m) + f(i + 1, j + 1, k, m)
1380 +f(i, j, k + 1, m) + f(i + 1, j, k + 1, m)
1381 + 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 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)
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])