1#ifndef NUMERIC_STENCIL_H_
2#define NUMERIC_STENCIL_H_
5#include <AMReX_MultiFab.H>
9#include "Set/Matrix4.H"
29[[maybe_unused]]
static std::array<StencilType, AMREX_SPACEDIM>
31[[maybe_unused]]
static std::array<StencilType, AMREX_SPACEDIM>
34[[maybe_unused]]
static std::array<StencilType, AMREX_SPACEDIM>
36[[maybe_unused]]
static std::array<StencilType, AMREX_SPACEDIM>
40[[maybe_unused]]
static std::array<StencilType, AMREX_SPACEDIM>
42[[maybe_unused]]
static std::array<StencilType, AMREX_SPACEDIM>
50std::array<StencilType, AMREX_SPACEDIM>
51GetStencil(
const int i,
const int j,
const int k,
const amrex::Box domain)
53 (void)i; (void)j; (void)k;
54 std::array<StencilType, AMREX_SPACEDIM> sten;
55 const amrex::Dim3 lo = amrex::lbound(domain), hi = amrex::ubound(domain);
68template<
class T,
int x,
int y,
int z>
79 [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
80 static T
D(
const amrex::Array4<const T>& f,
81 const int& i,
const int& j,
const int& k,
const int& m,
83 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
86 return (f(i, j, k, m) - f(i - 1, j, k, m)) / dx[0];
88 return (f(i + 1, j, k, m) - f(i, j, k, m)) / dx[0];
90 return (f(i + 1, j, k, m) - f(i - 1, j, k, m)) * 0.5 / dx[0];
92 [[nodiscard]] AMREX_FORCE_INLINE
93 static std::pair<Set::Scalar,T>
94 Dsplit(
const amrex::Array4<const T>& f,
95 const int& i,
const int& j,
const int& k,
const int& m,
97 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
100 return std::make_pair(
102 -f(i - 1, j, k, m) / dx[0]
105 return std::make_pair(
107 f(i + 1, j, k, m) / dx[0]
110 return std::make_pair(
112 (f(i + 1, j, k, m) - f(i - 1, j, k, m)) * 0.5 / dx[0]
120 [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
121 static T
D(
const amrex::Array4<const T>& f,
122 const int& i,
const int& j,
const int& k,
const int& m,
124 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
127 return (f(i, j, k, m) - f(i, j - 1, k, m)) / dx[1];
129 return (f(i, j + 1, k, m) - f(i, j, k, m)) / dx[1];
131 return (f(i, j + 1, k, m) - f(i, j - 1, k, m)) * 0.5 / dx[1];
133 [[nodiscard]] AMREX_FORCE_INLINE
134 static std::pair<Set::Scalar,T>
136 const int& i,
const int& j,
const int& k,
const int& m,
138 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
141 return std::make_pair(
143 - f(i, j - 1, k, m) / dx[1]
146 return std::make_pair(
148 f(i, j + 1, k, m) / dx[1]
151 return std::make_pair(
153 (f(i, j + 1, k, m) - f(i, j - 1, k, m)) * 0.5 / dx[1]
161 [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
162 static T
D(
const amrex::Array4<const T>& f,
163 const int& i,
const int& j,
const int& k,
const int& m,
165 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
168 return (f(i, j, k, m) - f(i, j, k - 1, m)) / dx[2];
170 return (f(i, j, k + 1, m) - f(i, j, k, m)) / dx[2];
172 return (f(i, j, k + 1, m) - f(i, j, k - 1, m)) * 0.5 / dx[2];
174 [[nodiscard]] AMREX_FORCE_INLINE
175 static std::pair<Set::Scalar, T>
177 const int& i,
const int& j,
const int& k,
const int& m,
179 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
182 return std::make_pair(
184 -f(i, j, k - 1, m) / dx[2]
187 return std::make_pair(
189 f(i, j, k + 1, m) / dx[2]
192 return std::make_pair(
194 (f(i, j, k + 1, m) - f(i, j, k - 1, m)) * 0.5 / dx[2]
206 [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
207 static T
D(
const amrex::Array4<const T>& f,
208 const int& i,
const int& j,
const int& k,
const int& m,
210 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
213 return (f(i + 1, j, k, m) - 2.0 * f(i, j, k, m) + f(i - 1, j, k, m)) / dx[0] / dx[0];
215 return 0.0 * f(i, j, k, m);
222 [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
223 static T
D(
const amrex::Array4<const T>& f,
224 const int& i,
const int& j,
const int& k,
const int& m,
226 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
229 return (f(i, j + 1, k, m) - 2.0 * f(i, j, k, m) + f(i, j - 1, k, m)) / dx[1] / dx[1];
231 return 0.0 * f(i, j, k, m);
238 [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
239 static T
D(
const amrex::Array4<const T>& f,
240 const int& i,
const int& j,
const int& k,
const int& m,
242 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
245 return (f(i, j, k + 1, m) - 2.0 * f(i, j, k, m) + f(i, j, k - 1, m)) / dx[2] / dx[2];
247 return 0.0 * f(i, j, k, m);
254 [[nodiscard]] AMREX_FORCE_INLINE
255 static T
D(
const amrex::Array4<const T>& f,
256 const int& i,
const int& j,
const int& k,
const int& m,
258 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
260 int ihi = 1, ilo = 1, jhi = 1, jlo = 1;
267 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]);
273 [[nodiscard]] AMREX_FORCE_INLINE
274 static T
D(
const amrex::Array4<const T>& f,
275 const int& i,
const int& j,
const int& k,
const int& m,
277 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
279 int khi = 1, klo = 1, ihi = 1, ilo = 1;
286 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]);
292 [[nodiscard]] AMREX_FORCE_INLINE
293 static T
D(
const amrex::Array4<const T>& f,
294 const int& i,
const int& j,
const int& k,
const int& m,
296 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
298 int jhi = 1, jlo = 1, khi = 1, klo = 1;
305 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]);
316 [[nodiscard]] AMREX_FORCE_INLINE
317 static T
D(
const amrex::Array4<const T>& f,
318 const int& i,
const int& j,
const int& k,
const int& m,
321 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))) /
322 (dx[0] * dx[0] * dx[0] * dx[0]);
328 [[nodiscard]] AMREX_FORCE_INLINE
329 static T
D(
const amrex::Array4<const T>& f,
330 const int& i,
const int& j,
const int& k,
const int& m,
333 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))) /
334 (dx[1] * dx[1] * dx[1] * dx[1]);
340 [[nodiscard]] AMREX_FORCE_INLINE
341 static T
D(
const amrex::Array4<const T>& f,
342 const int& i,
const int& j,
const int& k,
const int& m,
345 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))) /
346 (dx[2] * dx[2] * dx[2] * dx[2]);
355 [[nodiscard]] AMREX_FORCE_INLINE
356 static T
D(
const amrex::Array4<const T>& f,
357 const int& i,
const int& j,
const int& k,
const int& m,
360 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))
361 - 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))
362 + 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))
363 - (-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))) /
364 (24.0 * dx[0] * dx[0] * dx[0] * dx[1]);
373 [[nodiscard]] AMREX_FORCE_INLINE
374 static T
D(
const amrex::Array4<const T>& f,
375 const int& i,
const int& j,
const int& k,
const int& m,
378 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))
379 - 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))
380 + 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))
381 - (-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))) /
382 (24.0 * dx[0] * dx[1] * dx[1] * dx[1]);
391 [[nodiscard]] AMREX_FORCE_INLINE
392 static T
D(
const amrex::Array4<const T>& f,
393 const int& i,
const int& j,
const int& k,
const int& m,
396 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))
397 - 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))
398 + 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))
399 - (-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))) /
400 (24.0 * dx[1] * dx[1] * dx[1] * dx[2]);
407 [[nodiscard]] AMREX_FORCE_INLINE
408 static T
D(
const amrex::Array4<const T>& f,
409 const int& i,
const int& j,
const int& k,
const int& m,
412 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))
413 - 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))
414 + 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))
415 - (-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))) /
416 (24.0 * dx[1] * dx[2] * dx[2] * dx[2]);
423 [[nodiscard]] AMREX_FORCE_INLINE
424 static T
D(
const amrex::Array4<const T>& f,
425 const int& i,
const int& j,
const int& k,
const int& m,
428 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))
429 - 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))
430 + 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))
431 - (-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))) /
432 (24.0 * dx[0] * dx[2] * dx[2] * dx[2]);
440 [[nodiscard]] AMREX_FORCE_INLINE
441 static T
D(
const amrex::Array4<const T>& f,
442 const int& i,
const int& j,
const int& k,
const int& m,
445 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))
446 - 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))
447 + 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))
448 - (-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))) /
449 (24.0 * dx[0] * dx[0] * dx[0] * dx[2]);
457 [[nodiscard]] AMREX_FORCE_INLINE
458 static T
D(
const amrex::Array4<const T>& f,
459 const int& i,
const int& j,
const int& k,
const int& m,
462 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))
463 + 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))
464 - 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))
465 + 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))
466 - (-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))) /
467 (144.0 * dx[0] * dx[0] * dx[1] * dx[1]);
475 [[nodiscard]] AMREX_FORCE_INLINE
476 static T
D(
const amrex::Array4<const T>& f,
477 const int& i,
const int& j,
const int& k,
const int& m,
480 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))
481 + 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))
482 - 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))
483 + 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))
484 - (-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))) /
485 (144.0 * dx[0] * dx[0] * dx[2] * dx[2]);
492 [[nodiscard]] AMREX_FORCE_INLINE
493 static T
D(
const amrex::Array4<const T>& f,
494 const int& i,
const int& j,
const int& k,
const int& m,
497 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))
498 + 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))
499 - 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))
500 + 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))
501 - (-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))) /
502 (144.0 * dx[0] * dx[0] * dx[2] * dx[2]);
511 [[nodiscard]] AMREX_FORCE_INLINE
512 static T
D(
const amrex::Array4<const T>& f,
513 const int& i,
const int& j,
const int& k,
const int& m,
516 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))
517 - (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))
518 - (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))
519 + (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)))
520 / (4.0 * dx[0] * dx[0] * dx[1] * dx[2]);
528 [[nodiscard]] AMREX_FORCE_INLINE
529 static T
D(
const amrex::Array4<const T>& f,
530 const int& i,
const int& j,
const int& k,
const int& m,
533 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))
534 - (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))
535 - (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))
536 + (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)))
537 / (4.0 * dx[0] * dx[1] * dx[1] * dx[2]);
545 [[nodiscard]] AMREX_FORCE_INLINE
546 static T
D(
const amrex::Array4<const T>& f,
547 const int& i,
const int& j,
const int& k,
const int& m,
550 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))
551 - (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))
552 - (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))
553 + (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)))
554 / (4.0 * dx[0] * dx[1] * dx[1] * dx[2]);
559[[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
562 const int& i,
const int& j,
const int& k,
const int& m,
564 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
568#if AMREX_SPACEDIM > 1
570#if AMREX_SPACEDIM > 2
577[[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
580 const int& i,
const int& j,
const int& k,
585#if AMREX_SPACEDIM > 1
587#if AMREX_SPACEDIM > 2
594[[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
597 const int& i,
const int& j,
const int& k,
599 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
605 AMREX_D_TERM(ret(0) += (dw(i + 1, j, k)(0, 0) - dw(i - 1, j, k)(0, 0)) / 2. / DX[0];,
606 ret(1) += (dw(i + 1, j, k)(1, 0) - dw(i - 1, j, k)(1, 0)) / 2. / DX[0];,
607 ret(2) += (dw(i + 1, j, k)(2, 0) - dw(i - 1, j, k)(2, 0)) / 2. / DX[0];)
611 AMREX_D_TERM(ret(0) += (dw(i, j, k)(0, 0) - dw(i - 1, j, k)(0, 0)) / DX[0];,
612 ret(1) += (dw(i, j, k)(1, 0) - dw(i - 1, j, k)(1, 0)) / DX[0];,
613 ret(2) += (dw(i, j, k)(2, 0) - dw(i - 1, j, k)(2, 0)) / DX[0];)
617 AMREX_D_TERM(ret(0) += (dw(i + 1, j, k)(0, 0) - dw(i, j, k)(0, 0)) / DX[0];,
618 ret(1) += (dw(i + 1, j, k)(1, 0) - dw(i, j, k)(1, 0)) / DX[0];,
619 ret(2) += (dw(i + 1, j, k)(2, 0) - dw(i, j, k)(2, 0)) / DX[0];)
622#if AMREX_SPACEDIM > 1
625 AMREX_D_TERM(ret(0) += (dw(i, j + 1, k)(0, 1) - dw(i, j - 1, k)(0, 1)) / 2. / DX[1];,
626 ret(1) += (dw(i, j + 1, k)(1, 1) - dw(i, j - 1, k)(1, 1)) / 2. / DX[1];,
627 ret(2) += (dw(i, j + 1, k)(2, 1) - dw(i, j - 1, k)(2, 1)) / 2. / DX[1];)
631 AMREX_D_TERM(ret(0) += (dw(i, j, k)(0, 1) - dw(i, j - 1, k)(0, 1)) / DX[1];,
632 ret(1) += (dw(i, j, k)(1, 1) - dw(i, j - 1, k)(1, 1)) / DX[1];,
633 ret(2) += (dw(i, j, k)(2, 1) - dw(i, j - 1, k)(2, 1)) / DX[1];)
637 AMREX_D_TERM(ret(0) += (dw(i, j + 1, k)(0, 1) - dw(i, j, k)(0, 1)) / DX[1];,
638 ret(1) += (dw(i, j + 1, k)(1, 1) - dw(i, j, k)(1, 1)) / DX[1];,
639 ret(2) += (dw(i, j + 1, k)(2, 1) - dw(i, j, k)(2, 1)) / DX[1];)
642#if AMREX_SPACEDIM > 2
645 AMREX_D_TERM(ret(0) += (dw(i, j, k + 1)(0, 2) - dw(i, j, k - 1)(0, 2)) / 2. / DX[2];,
646 ret(1) += (dw(i, j, k + 1)(1, 2) - dw(i, j, k - 1)(1, 2)) / 2. / DX[2];,
647 ret(2) += (dw(i, j, k + 1)(2, 2) - dw(i, j, k - 1)(2, 2)) / 2. / DX[2];)
651 AMREX_D_TERM(ret(0) += (dw(i, j, k)(0, 2) - dw(i, j, k - 1)(0, 2)) / DX[2];,
652 ret(1) += (dw(i, j, k)(1, 2) - dw(i, j, k - 1)(1, 2)) / DX[2];,
653 ret(2) += (dw(i, j, k)(2, 2) - dw(i, j, k - 1)(2, 2)) / DX[2];)
657 AMREX_D_TERM(ret(0) += (dw(i, j, k + 1)(0, 2) - dw(i, j, k)(0, 2)) / DX[2];,
658 ret(1) += (dw(i, j, k + 1)(1, 2) - dw(i, j, k)(1, 2)) / DX[2];,
659 ret(2) += (dw(i, j, k + 1)(2, 2) - dw(i, j, k)(2, 2)) / DX[2];)
666[[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
669 const int &i,
const int &j,
const int &k,
const int &m,
671 std::array<StencilType,AMREX_SPACEDIM> stencil =
DefaultType())
675#if AMREX_SPACEDIM > 1
678#if AMREX_SPACEDIM > 2
685[[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
688 const int& i,
const int& j,
const int& k,
const int& m,
690 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
694#if AMREX_SPACEDIM > 1
696#if AMREX_SPACEDIM > 2
703[[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
706 const int& i,
const int& j,
const int& k,
const int& m,
710#if AMREX_SPACEDIM == 1
711 ret(0) = (f(i, j, k, m) - f(i - 1, j, k, m)) / dx[0];
712#elif AMREX_SPACEDIM == 2
713 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];
714 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];
715#elif AMREX_SPACEDIM == 3
716 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];
717 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];
718 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];
725[[nodiscard]] AMREX_FORCE_INLINE
726std::array<T, AMREX_SPACEDIM>
728 const int& i,
const int& j,
const int& k,
const int& m,
731 std::array<T, AMREX_SPACEDIM> ret;
733#if AMREX_SPACEDIM == 1
734 ret[0] = (f(i, j, k, m) - f(i - 1, j, k, m)) / dx[0];
735#elif AMREX_SPACEDIM == 2
736 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];
737 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];
738#elif AMREX_SPACEDIM == 3
739 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];
740 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];
741 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];
748[[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
751 const int& i,
const int& j,
const int& k,
753 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
756 ret(0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 0, dx, stencil));
757#if AMREX_SPACEDIM > 1
758 ret(0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 0, dx, stencil));
759 ret(1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 1, dx, stencil));
760 ret(1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 1, dx, stencil));
761#if AMREX_SPACEDIM > 2
762 ret(0, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 0, dx, stencil));
763 ret(2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 2, dx, stencil));
764 ret(1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 1, dx, stencil));
765 ret(2, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 2, dx, stencil));
766 ret(2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 2, dx, stencil));
772[[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
775 const int& i,
const int& j,
const int& k,
777 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
781#if AMREX_SPACEDIM > 0
784#if AMREX_SPACEDIM > 1
787#if AMREX_SPACEDIM > 2
797 const int i,
const int j,
const int k,
const int face,
801 const int ip = i + (face == 0);
802 const int jp = j + (face == 1);
803 const int kp = k + (face == 2);
804 ret.col(face) = (f(ip, jp, kp) - f(i, j, k)) / dx[face];
805 for (
int dir = 0; dir < AMREX_SPACEDIM; ++dir)
808 f(i + (dir == 0), j + (dir == 1), k + (dir == 2))
809 - f(i - (dir == 0), j - (dir == 1), k - (dir == 2))
810 + f(ip + (dir == 0), jp + (dir == 1), kp + (dir == 2))
811 - f(ip - (dir == 0), jp - (dir == 1), kp - (dir == 2)))
819 const int i,
const int j,
const int k,
const int face,
823 const int ip = i + (face == 0);
824 const int jp = j + (face == 1);
825 const int kp = k + (face == 2);
826 for (
int n = 0; n < AMREX_SPACEDIM; ++n)
828 ret(n, face) = (f(ip, jp, kp, n) - f(i, j, k, n)) / dx[face];
829 for (
int dir = 0; dir < AMREX_SPACEDIM; ++dir)
832 f(i + (dir == 0), j + (dir == 1), k + (dir == 2), n)
833 - f(i - (dir == 0), j - (dir == 1), k - (dir == 2), n)
834 + f(ip + (dir == 0), jp + (dir == 1),
836 - f(ip - (dir == 0), jp - (dir == 1),
843[[nodiscard]] AMREX_FORCE_INLINE
844std::pair<Set::Vector,Set::Matrix>
846 const int& i,
const int& j,
const int& k,
848 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
853 std::pair<Set::Scalar,Set::Vector> ret;
854#if AMREX_SPACEDIM > 0
857 offdiag.col(0) = ret.second;
859#if AMREX_SPACEDIM > 1
862 offdiag.col(1) = ret.second;
864#if AMREX_SPACEDIM > 2
867 offdiag.col(2) = ret.second;
869 return std::make_pair(diag,offdiag);
873[[nodiscard]] AMREX_FORCE_INLINE
876 const int& i,
const int& j,
const int& k,
880#if AMREX_SPACEDIM == 1
881 ret(0) = (f(i + 1, j, k) - f(i, j, k)) / dx[0];
882#elif AMREX_SPACEDIM == 2
883 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];
884 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];
885#elif AMREX_SPACEDIM == 3
886 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];
887 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];
888 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];
893[[nodiscard]] AMREX_FORCE_INLINE
896 const int& i,
const int& j,
const int& k,
900#if AMREX_SPACEDIM == 1
901 ret.col(0) = (f(i + 1, j, k) - f(i, j, k)) / dx[0];
902#elif AMREX_SPACEDIM == 2
903 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];
904 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];
905#elif AMREX_SPACEDIM == 3
906 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];
907 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];
908 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];
913[[nodiscard]] AMREX_FORCE_INLINE
916 const int& i,
const int& j,
const int& k,
const int& m,
920#if AMREX_SPACEDIM == 1
921 ret(0) = (f(i + 1, j, k, m) - f(i, j, k, m)) / dx[0];
922#elif AMREX_SPACEDIM == 2
923 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];
924 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];
925#elif AMREX_SPACEDIM == 3
926 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];
927 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];
928 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];
933[[nodiscard]] AMREX_FORCE_INLINE
936 const int& i,
const int& j,
const int& k,
938 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
942#if AMREX_SPACEDIM > 0
945#if AMREX_SPACEDIM > 1
948#if AMREX_SPACEDIM > 2
956[[nodiscard]] AMREX_FORCE_INLINE
957std::array<T,AMREX_SPACEDIM>
959 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType());
962[[nodiscard]] AMREX_FORCE_INLINE
963std::array<Set::Matrix,AMREX_SPACEDIM>
965 std::array<StencilType, AMREX_SPACEDIM> stencil)
968 std::array<Set::Matrix,AMREX_SPACEDIM> gradu;
976 for (
int p = 0; p < AMREX_SPACEDIM; p++)
977 for (
int q = 0; q < AMREX_SPACEDIM; q++)
980 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]);,
981 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]);,
982 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]););
988[[nodiscard]] AMREX_FORCE_INLINE
989std::array<Set::Matrix3,AMREX_SPACEDIM>
991 std::array<StencilType, AMREX_SPACEDIM> stencil)
997 std::array<Set::Matrix3,AMREX_SPACEDIM> gradgradu;
999 for (
int p = 0; p < AMREX_SPACEDIM; p++)
1000 for (
int q = 0; q < AMREX_SPACEDIM; q++)
1004 gradgradu[p](q, 0, 0) = (p == q ? -2.0 : 0.0) / dx[0] / dx[0];
1006 gradgradu[p](q, 0, 1) = 0.0;
1007 gradgradu[p](q, 1, 0) = 0.0;
1008 gradgradu[p](q, 1, 1) = (p == q ? -2.0 : 0.0) / dx[1] / dx[1];
1010 gradgradu[p](q, 0, 2) = 0.0;
1011 gradgradu[p](q, 1, 2) = 0.0;
1012 gradgradu[p](q, 2, 0) = 0.0;
1013 gradgradu[p](q, 2, 1) = 0.0;
1014 gradgradu[p](q, 2, 2) = (p == q ? -2.0 : 0.0) / dx[2] / dx[2]);
1022[[nodiscard]] AMREX_FORCE_INLINE
1025 const int& i,
const int& j,
const int& k,
1030#if AMREX_SPACEDIM > 0
1031 ret[0] = (f(i+1,j,k) - f(i,j,k)) / dx[0];
1033#if AMREX_SPACEDIM > 1
1034 ret[1] = (f(i,j+1,k) - f(i,j,k)) / dx[1];
1036#if AMREX_SPACEDIM > 2
1037 ret[2] = (f(i,j,k+1) - f(i,j,k)) / dx[2];
1044[[nodiscard]] AMREX_FORCE_INLINE
1047 const int& i,
const int& j,
const int& k,
1049 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
1052#if AMREX_SPACEDIM == 1
1053 ret[0](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 0, dx, stencil));
1054#elif AMREX_SPACEDIM == 2
1055 ret[0](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 0, dx, stencil));
1056 ret[0](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 0, dx, stencil));
1057 ret[0](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 1, dx, stencil));
1058 ret[0](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 1, dx, stencil));
1059 ret[1](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 2, dx, stencil));
1060 ret[1](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 2, dx, stencil));
1061 ret[1](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 3, dx, stencil));
1062 ret[1](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 3, dx, stencil));
1063#elif AMREX_SPACEDIM == 3
1064 ret[0](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 0, dx, stencil));
1065 ret[0](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 1, dx, stencil));
1066 ret[0](2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 2, dx, stencil));
1067 ret[1](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 3, dx, stencil));
1068 ret[1](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 4, dx, stencil));
1069 ret[1](2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 5, dx, stencil));
1070 ret[2](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 6, dx, stencil));
1071 ret[2](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 7, dx, stencil));
1072 ret[2](2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 8, dx, stencil));
1073 ret[0](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 0, dx, stencil));
1074 ret[0](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 1, dx, stencil));
1075 ret[0](2, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 2, dx, stencil));
1076 ret[1](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 3, dx, stencil));
1077 ret[1](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 4, dx, stencil));
1078 ret[1](2, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 5, dx, stencil));
1079 ret[2](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 6, dx, stencil));
1080 ret[2](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 7, dx, stencil));
1081 ret[2](2, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 8, dx, stencil));
1082 ret[0](0, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 0, dx, stencil));
1083 ret[0](1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 1, dx, stencil));
1084 ret[0](2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 2, dx, stencil));
1085 ret[1](0, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 3, dx, stencil));
1086 ret[1](1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 4, dx, stencil));
1087 ret[1](2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 5, dx, stencil));
1088 ret[2](0, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 6, dx, stencil));
1089 ret[2](1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 7, dx, stencil));
1090 ret[2](2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 8, dx, stencil));
1096[[nodiscard]] AMREX_FORCE_INLINE
1099 const int& i,
const int& j,
const int& k,
const int& m,
1101 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType()
1105 ret(0, 0) = (
Numeric::Stencil<Set::Scalar, 2, 0, 0>::D(f, i, j, k, m, dx, stencil));
1106#if AMREX_SPACEDIM > 1
1107 ret(1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 2, 0>::D(f, i, j, k, m, dx, stencil));
1108 ret(0, 1) = (
Numeric::Stencil<Set::Scalar, 1, 1, 0>::D(f, i, j, k, m, dx, stencil));
1109 ret(1, 0) = ret(0, 1);
1110#if AMREX_SPACEDIM > 2
1111 ret(2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 2>::D(f, i, j, k, m, dx, stencil));
1112 ret(1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 1, 1>::D(f, i, j, k, m, dx, stencil));
1113 ret(2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 1>::D(f, i, j, k, m, dx, stencil));
1114 ret(2, 1) = ret(1, 2);
1115 ret(0, 2) = ret(2, 0);
1121[[nodiscard]] AMREX_FORCE_INLINE
1124 const int& i,
const int& j,
const int& k,
1126 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
1131 ret(0, 0, 0) = (
Numeric::Stencil<Set::Scalar, 2, 0, 0>::D(f, i, j, k, 0, DX, stencil));
1135 ret(0, 0, 1) = (
Numeric::Stencil<Set::Scalar, 1, 1, 0>::D(f, i, j, k, 0, DX, stencil));
1136 ret(0, 1, 0) = ret(0, 0, 1);
1137 ret(0, 1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 2, 0>::D(f, i, j, k, 0, DX, stencil));
1138 ret(1, 0, 0) = (
Numeric::Stencil<Set::Scalar, 2, 0, 0>::D(f, i, j, k, 1, DX, stencil));
1139 ret(1, 0, 1) = (
Numeric::Stencil<Set::Scalar, 1, 1, 0>::D(f, i, j, k, 1, DX, stencil));
1140 ret(1, 1, 0) = ret(1, 0, 1);
1141 ret(1, 1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 2, 0>::D(f, i, j, k, 1, DX, stencil));
1145 ret(0, 2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 2>::D(f, i, j, k, 0, DX, stencil));
1146 ret(0, 0, 2) = (
Numeric::Stencil<Set::Scalar, 1, 0, 1>::D(f, i, j, k, 0, DX, stencil));
1147 ret(0, 1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 1, 1>::D(f, i, j, k, 0, DX, stencil));
1148 ret(0, 2, 0) = ret(0, 0, 2);
1149 ret(0, 2, 1) = ret(0, 1, 2);;
1150 ret(1, 2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 2>::D(f, i, j, k, 1, DX, stencil));
1151 ret(1, 0, 2) = (
Numeric::Stencil<Set::Scalar, 1, 0, 1>::D(f, i, j, k, 1, DX, stencil));
1152 ret(1, 1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 1, 1>::D(f, i, j, k, 1, DX, stencil));
1153 ret(1, 2, 0) = ret(1, 0, 2);
1154 ret(1, 2, 1) = ret(1, 1, 2);;
1155 ret(2, 0, 0) = (
Numeric::Stencil<Set::Scalar, 2, 0, 0>::D(f, i, j, k, 2, DX, stencil));
1156 ret(2, 1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 2, 0>::D(f, i, j, k, 2, DX, stencil));
1157 ret(2, 2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 2>::D(f, i, j, k, 2, DX, stencil));
1158 ret(2, 0, 1) = (
Numeric::Stencil<Set::Scalar, 1, 1, 0>::D(f, i, j, k, 2, DX, stencil));
1159 ret(2, 1, 0) = ret(2, 0, 1);
1160 ret(2, 0, 2) = (
Numeric::Stencil<Set::Scalar, 1, 0, 1>::D(f, i, j, k, 2, DX, stencil));
1161 ret(2, 1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 1, 1>::D(f, i, j, k, 2, DX, stencil));
1162 ret(2, 2, 0) = ret(2, 0, 2);
1163 ret(2, 2, 1) = ret(2, 1, 2);;
1171[[nodiscard]] AMREX_FORCE_INLINE
1174 const int& i,
const int& j,
const int& k,
1176 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
1182 ret[0](0, 0) = f_11(0);
1185 ret[1](0, 0) = f_11(1);
1187 ret[0](1, 0) = ret[0](0, 1) = f_12(0);
1188 ret[1](1, 0) = ret[1](0, 1) = f_12(1);
1190 ret[0](1, 1) = f_22(0);
1191 ret[1](1, 1) = f_22(1);
1194 ret[2](0, 0) = f_11(2);
1195 ret[2](1, 0) = ret[2](0, 1) = f_12(2);
1197 ret[0](2, 0) = ret[0](0, 2) = f_13(0);
1198 ret[1](2, 0) = ret[1](0, 2) = f_13(1);
1199 ret[2](2, 0) = ret[2](0, 2) = f_13(2);
1200 ret[2](1, 1) = f_22(2);
1202 ret[0](1, 2) = ret[0](2, 1) = f_23(0);
1203 ret[1](1, 2) = ret[1](2, 1) = f_23(1);
1204 ret[2](1, 2) = ret[2](2, 1) = f_23(2);
1206 ret[0](2, 2) = f_33(0);
1207 ret[1](2, 2) = f_33(1);
1208 ret[2](2, 2) = f_33(2);
1214[[nodiscard]] AMREX_FORCE_INLINE
1217 const int& i,
const int& j,
const int& k)
1220#if AMREX_SPACEDIM == 1
1221 ret(0, 0) = f(i, j, k, 0);
1223#elif AMREX_SPACEDIM == 2
1224 ret(0, 0) = f(i, j, k, 0); ret(0, 1) = f(i, j, k, 1);
1225 ret(1, 0) = f(i, j, k, 2); ret(1, 1) = f(i, j, k, 3);
1227#elif AMREX_SPACEDIM == 3
1228 ret(0, 0) = f(i, j, k, 0); ret(0, 1) = f(i, j, k, 1); ret(0, 2) = f(i, j, k, 2);
1229 ret(1, 0) = f(i, j, k, 3); ret(1, 1) = f(i, j, k, 4); ret(1, 2) = f(i, j, k, 5);
1230 ret(2, 0) = f(i, j, k, 6); ret(2, 1) = f(i, j, k, 7); ret(2, 2) = f(i, j, k, 8);
1236[[nodiscard]] AMREX_FORCE_INLINE
1239 const int& i,
const int& j,
const int& k)
1242#if AMREX_SPACEDIM == 1
1243 ret(0, 0) = f(i, j, k, 0);
1245#elif AMREX_SPACEDIM == 2
1246 ret(0, 0) = f(i, j, k, 0); ret(0, 1) = f(i, j, k, 1);
1247 ret(1, 0) = f(i, j, k, 2); ret(1, 1) = f(i, j, k, 3);
1249#elif AMREX_SPACEDIM == 3
1250 ret(0, 0) = f(i, j, k, 0); ret(0, 1) = f(i, j, k, 1); ret(0, 2) = f(i, j, k, 2);
1251 ret(1, 0) = f(i, j, k, 3); ret(1, 1) = f(i, j, k, 4); ret(1, 2) = f(i, j, k, 5);
1252 ret(2, 0) = f(i, j, k, 6); ret(2, 1) = f(i, j, k, 7); ret(2, 2) = f(i, j, k, 8);
1258[[nodiscard]] AMREX_FORCE_INLINE
1261 const int& i,
const int& j,
const int& k)
1264 ret(0) = f(i, j, k, 0);
1265#if AMREX_SPACEDIM > 1
1266 ret(1) = f(i, j, k, 1);
1267#if AMREX_SPACEDIM > 2
1268 ret(2) = f(i, j, k, 2);
1274[[nodiscard]] AMREX_FORCE_INLINE
1277 const int& i,
const int& j,
const int& k)
1280 ret(0) = f(i, j, k, 0);
1281#if AMREX_SPACEDIM > 1
1282 ret(1) = f(i, j, k, 1);
1283#if AMREX_SPACEDIM > 2
1284 ret(2) = f(i, j, k, 2);
1293 const int& i,
const int& j,
const int& k,
1296#if AMREX_SPACEDIM == 1
1297 f(i, j, k, 0) = matrix(0, 0);
1298#elif AMREX_SPACEDIM == 2
1299 f(i, j, k, 0) = matrix(0, 0); f(i, j, k, 1) = matrix(0, 1);
1300 f(i, j, k, 2) = matrix(1, 0); f(i, j, k, 3) = matrix(1, 1);
1301#elif AMREX_SPACEDIM == 3
1302 f(i, j, k, 0) = matrix(0, 0); f(i, j, k, 1) = matrix(0, 1); f(i, j, k, 2) = matrix(0, 2);
1303 f(i, j, k, 3) = matrix(1, 0); f(i, j, k, 4) = matrix(1, 1); f(i, j, k, 5) = matrix(1, 2);
1304 f(i, j, k, 6) = matrix(2, 0); f(i, j, k, 7) = matrix(2, 1); f(i, j, k, 8) = matrix(2, 2);
1311 const int& i,
const int& j,
const int& k,
1314 f(i, j, k, 0) = vector(0);
1315#if AMREX_SPACEDIM > 1
1316 f(i, j, k, 1) = vector(1);
1317#if AMREX_SPACEDIM > 2
1318 f(i, j, k, 2) = vector(2);
1323template<
int index,
int SYM>
1327 const int,
const int,
const int,
const Set::Scalar[AMREX_SPACEDIM],
1328 std::array<StencilType, AMREX_SPACEDIM> =
DefaultType())
1334[[nodiscard]] AMREX_FORCE_INLINE
1336 const int i,
const int j,
const int k,
const Set::Scalar dx[AMREX_SPACEDIM],
1337 std::array<StencilType, AMREX_SPACEDIM> stencil)
1342 Numeric::Stencil<Set::Matrix4<AMREX_SPACEDIM, Set::Sym::Isotropic>, 1, 0, 0>::D(C, i, j, k, 0, dx, stencil);
1345 Numeric::Stencil<Set::Matrix4<AMREX_SPACEDIM, Set::Sym::Isotropic>, 0, 1, 0>::D(C, i, j, k, 0, dx, stencil);
1349 Numeric::Stencil<Set::Matrix4<AMREX_SPACEDIM, Set::Sym::Isotropic>, 0, 0, 1>::D(C, i, j, k, 0, dx, stencil);
1352 for (
int i = 0; i < AMREX_SPACEDIM; i++)
1353 for (
int k = 0; k < AMREX_SPACEDIM; k++)
1354 for (
int l = 0; l < AMREX_SPACEDIM; l++)
1357 ret(i, k, l) = gradCx(i, 0, k, l);
1359 ret(i, k, l) = gradCy(i, 1, k, l);
1362 ret(i, k, l) = gradCz(i, 2, k, l);
1372[[nodiscard]] AMREX_FORCE_INLINE
1375 const int& i,
const int& j,
const int& k,
const int& m,
1379[[nodiscard]] AMREX_FORCE_INLINE
1382 const int& i,
const int& j,
const int& k,
const int& m,
1387 ret(0, 0, 0, 0) =
Stencil<Set::Scalar, 4, 0, 0>::D(f, i, j, k, m, dx);
1389 ret(0, 0, 0, 1) =
Stencil<Set::Scalar, 3, 1, 0>::D(f, i, j, k, m, dx);
1391 ret(0, 0, 1, 1) =
Stencil<Set::Scalar, 2, 2, 0>::D(f, i, j, k, m, dx);
1393 ret(0, 1, 1, 1) =
Stencil<Set::Scalar, 1, 3, 0>::D(f, i, j, k, m, dx);
1395 ret(1, 1, 1, 1) =
Stencil<Set::Scalar, 0, 4, 0>::D(f, i, j, k, m, dx);
1400[[nodiscard]] AMREX_FORCE_INLINE
1403 const int& i,
const int& j,
const int& k,
const int& m,
1408 ret(0, 0, 0, 0) =
Stencil<Set::Scalar, 4, 0, 0>::D(f, i, j, k, m, dx);
1410 ret(0, 0, 0, 1) =
Stencil<Set::Scalar, 3, 1, 0>::D(f, i, j, k, m, dx);
1412 ret(0, 0, 0, 2) =
Stencil<Set::Scalar, 3, 0, 1>::D(f, i, j, k, m, dx);
1414 ret(0, 0, 1, 1) =
Stencil<Set::Scalar, 2, 2, 0>::D(f, i, j, k, m, dx);
1416 ret(0, 0, 1, 2) =
Stencil<Set::Scalar, 2, 1, 1>::D(f, i, j, k, m, dx);
1418 ret(0, 0, 2, 2) =
Stencil<Set::Scalar, 2, 0, 2>::D(f, i, j, k, m, dx);
1420 ret(0, 1, 1, 1) =
Stencil<Set::Scalar, 1, 3, 0>::D(f, i, j, k, m, dx);
1422 ret(0, 1, 1, 2) =
Stencil<Set::Scalar, 1, 2, 1>::D(f, i, j, k, m, dx);
1424 ret(0, 1, 2, 2) =
Stencil<Set::Scalar, 1, 1, 2>::D(f, i, j, k, m, dx);
1426 ret(0, 2, 2, 2) =
Stencil<Set::Scalar, 1, 0, 3>::D(f, i, j, k, m, dx);
1428 ret(1, 1, 1, 1) =
Stencil<Set::Scalar, 0, 4, 0>::D(f, i, j, k, m, dx);
1430 ret(1, 1, 1, 2) =
Stencil<Set::Scalar, 0, 3, 1>::D(f, i, j, k, m, dx);
1432 ret(1, 1, 2, 2) =
Stencil<Set::Scalar, 0, 2, 2>::D(f, i, j, k, m, dx);
1434 ret(1, 2, 2, 2) =
Stencil<Set::Scalar, 0, 1, 3>::D(f, i, j, k, m, dx);
1436 ret(2, 2, 2, 2) =
Stencil<Set::Scalar, 0, 0, 4>::D(f, i, j, k, m, dx);
1444 [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
1446 const int& i,
const int& j,
const int& k,
const int& m,
1447 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
1454 return (AMREX_D_TERM(f(i, j, k, m) + f(i - ilo, j, k, m)
1456 +f(i, j - jlo, k, m) + f(i - ilo, j - jlo, k, m)
1458 +f(i, j, k - klo, m) + f(i - ilo, j, k - klo, m)
1459 + f(i, j - jlo, k - klo, m) + f(i - ilo, j - jlo, k - klo, m)
1463 [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
1465 const int& i,
const int& j,
const int& k,
const int& m,
1466 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType())
1473 return (AMREX_D_TERM(f(i, j, k, m) + f(i - ilo, j, k, m)
1475 +f(i, j - jlo, k, m) + f(i - ilo, j - jlo, k, m)
1477 +f(i, j, k - klo, m) + f(i - ilo, j, k - klo, m)
1478 + f(i, j - jlo, k - klo, m) + f(i - ilo, j - jlo, k - klo, m)
1482 [[nodiscard]] AMREX_FORCE_INLINE
1484 const int& i,
const int& j,
const int& k,
const int& m)
1486 return (AMREX_D_TERM(f(i, j, k, m) + f(i + 1, j, k, m)
1488 +f(i, j + 1, k, m) + f(i + 1, j + 1, k, m)
1490 +f(i, j, k + 1, m) + f(i + 1, j, k + 1, m)
1491 + f(i, j + 1, k + 1, m) + f(i + 1, j + 1, k + 1, m)
1495 [[nodiscard]] AMREX_FORCE_INLINE
1497 const int& i,
const int& j,
const int& k,
const int& m)
1499 return (AMREX_D_TERM(f(i, j, k, m) + f(i + 1, j, k, m)
1501 +f(i, j + 1, k, m) + f(i + 1, j + 1, k, m)
1503 +f(i, j, k + 1, m) + f(i + 1, j, k + 1, m)
1504 + 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::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_GPU_HOST_DEVICE 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::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)
Set::Matrix FaceGradient(const amrex::Array4< const Set::Vector > &f, const int i, const int j, const int k, const int face, const Set::Scalar dx[AMREX_SPACEDIM])
AMREX_FORCE_INLINE void VectorToField(const amrex::Array4< Set::Scalar > &f, const int &i, const int &j, const int &k, Set::Vector vector)
AMREX_GPU_HOST_DEVICE 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 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())
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 std::array< T, AMREX_SPACEDIM > Gradient_Diagonal(const Set::Scalar dx[AMREX_SPACEDIM], std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType())
static AMREX_GPU_HOST_DEVICE 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::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_GPU_HOST_DEVICE AMREX_FORCE_INLINE std::array< StencilType, AMREX_SPACEDIM > DefaultType()
AMREX_GPU_HOST_DEVICE 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 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::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_GPU_HOST_DEVICE 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 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
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE void Assert(const char *file, const char *func, int line, const char *smt, bool pass, Args const &... args)
AMREX_GPU_HOST_DEVICE void Abort(const char *msg)
AMREX_GPU_HOST_DEVICE 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 constexpr Set::Scalar fac
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)
AMREX_GPU_HOST_DEVICE 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())
AMREX_GPU_HOST_DEVICE 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())
AMREX_GPU_HOST_DEVICE 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 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())
AMREX_GPU_HOST_DEVICE 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])
AMREX_GPU_HOST_DEVICE 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])
AMREX_GPU_HOST_DEVICE 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])
AMREX_GPU_HOST_DEVICE 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])