1#ifndef NUMERIC_STENCIL_H_
2#define NUMERIC_STENCIL_H_
5#include <AMReX_MultiFab.H>
13static std::array<StencilType, AMREX_SPACEDIM>
15[[maybe_unused]]
static std::array<StencilType, AMREX_SPACEDIM>
17[[maybe_unused]]
static std::array<StencilType, AMREX_SPACEDIM>
20[[maybe_unused]]
static std::array<StencilType, AMREX_SPACEDIM>
22[[maybe_unused]]
static std::array<StencilType, AMREX_SPACEDIM>
26[[maybe_unused]]
static std::array<StencilType, AMREX_SPACEDIM>
28[[maybe_unused]]
static std::array<StencilType, AMREX_SPACEDIM>
35std::array<StencilType, AMREX_SPACEDIM>
36GetStencil(
const int i,
const int j,
const int k,
const amrex::Box domain)
38 (void)i; (void)j; (void)k;
39 std::array<StencilType, AMREX_SPACEDIM> sten;
40 const amrex::Dim3 lo = amrex::lbound(domain), hi = amrex::ubound(domain);
53template<
class T,
int x,
int y,
int z>
64 [[nodiscard]] AMREX_FORCE_INLINE
65 static T
D(
const amrex::Array4<const T>& f,
66 const int& i,
const int& j,
const int& k,
const int& m,
68 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
71 return (f(i, j, k, m) - f(i - 1, j, k, m)) / dx[0];
73 return (f(i + 1, j, k, m) - f(i, j, k, m)) / dx[0];
75 return (f(i + 1, j, k, m) - f(i - 1, j, k, m)) * 0.5 / dx[0];
77 [[nodiscard]] AMREX_FORCE_INLINE
78 static std::pair<Set::Scalar,T>
79 Dsplit(
const amrex::Array4<const T>& f,
80 const int& i,
const int& j,
const int& k,
const int& m,
82 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
85 return std::make_pair(
87 -f(i - 1, j, k, m) / dx[0]
90 return std::make_pair(
92 f(i + 1, j, k, m) / dx[0]
95 return std::make_pair(
97 (f(i + 1, j, k, m) - f(i - 1, j, k, m)) * 0.5 / dx[0]
105 [[nodiscard]] AMREX_FORCE_INLINE
106 static T
D(
const amrex::Array4<const T>& f,
107 const int& i,
const int& j,
const int& k,
const int& m,
109 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
112 return (f(i, j, k, m) - f(i, j - 1, k, m)) / dx[1];
114 return (f(i, j + 1, k, m) - f(i, j, k, m)) / dx[1];
116 return (f(i, j + 1, k, m) - f(i, j - 1, k, m)) * 0.5 / dx[1];
118 [[nodiscard]] AMREX_FORCE_INLINE
119 static std::pair<Set::Scalar,T>
121 const int& i,
const int& j,
const int& k,
const int& m,
123 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
126 return std::make_pair(
128 - f(i, j - 1, k, m) / dx[1]
131 return std::make_pair(
133 f(i, j + 1, k, m) / dx[1]
136 return std::make_pair(
138 (f(i, j + 1, k, m) - f(i, j - 1, k, m)) * 0.5 / dx[1]
146 [[nodiscard]] AMREX_FORCE_INLINE
147 static T
D(
const amrex::Array4<const T>& f,
148 const int& i,
const int& j,
const int& k,
const int& m,
150 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
153 return (f(i, j, k, m) - f(i, j, k - 1, m)) / dx[2];
155 return (f(i, j, k + 1, m) - f(i, j, k, m)) / dx[2];
157 return (f(i, j, k + 1, m) - f(i, j, k - 1, m)) * 0.5 / dx[2];
159 [[nodiscard]] AMREX_FORCE_INLINE
160 static std::pair<Set::Scalar, T>
162 const int& i,
const int& j,
const int& k,
const int& m,
164 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
167 return std::make_pair(
169 -f(i, j, k - 1, m) / dx[2]
172 return std::make_pair(
174 f(i, j, k + 1, m) / dx[2]
177 return std::make_pair(
179 (f(i, j, k + 1, m) - f(i, j, k - 1, m)) * 0.5 / dx[2]
191 [[nodiscard]] AMREX_FORCE_INLINE
192 static T
D(
const amrex::Array4<const T>& f,
193 const int& i,
const int& j,
const int& k,
const int& m,
195 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
198 return (f(i + 1, j, k, m) - 2.0 * f(i, j, k, m) + f(i - 1, j, k, m)) / dx[0] / dx[0];
200 return 0.0 * f(i, j, k, m);
207 [[nodiscard]] AMREX_FORCE_INLINE
208 static T
D(
const amrex::Array4<const T>& f,
209 const int& i,
const int& j,
const int& k,
const int& m,
211 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
214 return (f(i, j + 1, k, m) - 2.0 * f(i, j, k, m) + f(i, j - 1, k, m)) / dx[1] / dx[1];
216 return 0.0 * f(i, j, k, m);
223 [[nodiscard]] AMREX_FORCE_INLINE
224 static T
D(
const amrex::Array4<const T>& f,
225 const int& i,
const int& j,
const int& k,
const int& m,
227 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
230 return (f(i, j, k + 1, m) - 2.0 * f(i, j, k, m) + f(i, j, k - 1, m)) / dx[2] / dx[2];
232 return 0.0 * f(i, j, k, m);
239 [[nodiscard]] AMREX_FORCE_INLINE
240 static T
D(
const amrex::Array4<const T>& f,
241 const int& i,
const int& j,
const int& k,
const int& m,
243 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
245 int ihi = 1, ilo = 1, jhi = 1, jlo = 1;
252 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]);
258 [[nodiscard]] AMREX_FORCE_INLINE
259 static T
D(
const amrex::Array4<const T>& f,
260 const int& i,
const int& j,
const int& k,
const int& m,
262 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
264 int khi = 1, klo = 1, ihi = 1, ilo = 1;
271 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]);
277 [[nodiscard]] AMREX_FORCE_INLINE
278 static T
D(
const amrex::Array4<const T>& f,
279 const int& i,
const int& j,
const int& k,
const int& m,
281 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
283 int jhi = 1, jlo = 1, khi = 1, klo = 1;
290 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]);
301 [[nodiscard]] AMREX_FORCE_INLINE
302 static T
D(
const amrex::Array4<const T>& f,
303 const int& i,
const int& j,
const int& k,
const int& m,
306 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))) /
307 (dx[0] * dx[0] * dx[0] * dx[0]);
313 [[nodiscard]] AMREX_FORCE_INLINE
314 static T
D(
const amrex::Array4<const T>& f,
315 const int& i,
const int& j,
const int& k,
const int& m,
318 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))) /
319 (dx[1] * dx[1] * dx[1] * dx[1]);
325 [[nodiscard]] AMREX_FORCE_INLINE
326 static T
D(
const amrex::Array4<const T>& f,
327 const int& i,
const int& j,
const int& k,
const int& m,
330 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))) /
331 (dx[2] * dx[2] * dx[2] * dx[2]);
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 + 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))
346 - 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))
347 + 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))
348 - (-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))) /
349 (24.0 * dx[0] * dx[0] * dx[0] * dx[1]);
358 [[nodiscard]] AMREX_FORCE_INLINE
359 static T
D(
const amrex::Array4<const T>& f,
360 const int& i,
const int& j,
const int& k,
const int& m,
363 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))
364 - 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))
365 + 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))
366 - (-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))) /
367 (24.0 * dx[0] * dx[1] * dx[1] * dx[1]);
376 [[nodiscard]] AMREX_FORCE_INLINE
377 static T
D(
const amrex::Array4<const T>& f,
378 const int& i,
const int& j,
const int& k,
const int& m,
381 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))
382 - 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))
383 + 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))
384 - (-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))) /
385 (24.0 * dx[1] * dx[1] * dx[1] * dx[2]);
392 [[nodiscard]] AMREX_FORCE_INLINE
393 static T
D(
const amrex::Array4<const T>& f,
394 const int& i,
const int& j,
const int& k,
const int& m,
397 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))
398 - 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))
399 + 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))
400 - (-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))) /
401 (24.0 * dx[1] * dx[2] * dx[2] * dx[2]);
408 [[nodiscard]] AMREX_FORCE_INLINE
409 static T
D(
const amrex::Array4<const T>& f,
410 const int& i,
const int& j,
const int& k,
const int& m,
413 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))
414 - 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))
415 + 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))
416 - (-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))) /
417 (24.0 * dx[0] * dx[2] * dx[2] * dx[2]);
425 [[nodiscard]] AMREX_FORCE_INLINE
426 static T
D(
const amrex::Array4<const T>& f,
427 const int& i,
const int& j,
const int& k,
const int& m,
430 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))
431 - 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))
432 + 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))
433 - (-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))) /
434 (24.0 * dx[0] * dx[0] * dx[0] * dx[2]);
442 [[nodiscard]] AMREX_FORCE_INLINE
443 static T
D(
const amrex::Array4<const T>& f,
444 const int& i,
const int& j,
const int& k,
const int& m,
447 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))
448 + 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))
449 - 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))
450 + 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))
451 - (-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))) /
452 (144.0 * dx[0] * dx[0] * dx[1] * dx[1]);
460 [[nodiscard]] AMREX_FORCE_INLINE
461 static T
D(
const amrex::Array4<const T>& f,
462 const int& i,
const int& j,
const int& k,
const int& m,
465 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))
466 + 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))
467 - 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))
468 + 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))
469 - (-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))) /
470 (144.0 * dx[0] * dx[0] * dx[2] * dx[2]);
477 [[nodiscard]] AMREX_FORCE_INLINE
478 static T
D(
const amrex::Array4<const T>& f,
479 const int& i,
const int& j,
const int& k,
const int& m,
482 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))
483 + 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))
484 - 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))
485 + 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))
486 - (-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))) /
487 (144.0 * dx[0] * dx[0] * dx[2] * dx[2]);
496 [[nodiscard]] AMREX_FORCE_INLINE
497 static T
D(
const amrex::Array4<const T>& f,
498 const int& i,
const int& j,
const int& k,
const int& m,
501 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))
502 - (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))
503 - (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))
504 + (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)))
505 / (4.0 * dx[0] * dx[0] * dx[1] * dx[2]);
513 [[nodiscard]] AMREX_FORCE_INLINE
514 static T
D(
const amrex::Array4<const T>& f,
515 const int& i,
const int& j,
const int& k,
const int& m,
518 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))
519 - (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))
520 - (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))
521 + (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)))
522 / (4.0 * dx[0] * dx[1] * dx[1] * dx[2]);
530 [[nodiscard]] AMREX_FORCE_INLINE
531 static T
D(
const amrex::Array4<const T>& f,
532 const int& i,
const int& j,
const int& k,
const int& m,
535 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))
536 - (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))
537 - (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))
538 + (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)))
539 / (4.0 * dx[0] * dx[1] * dx[1] * dx[2]);
544[[nodiscard]] AMREX_FORCE_INLINE
547 const int& i,
const int& j,
const int& k,
const int& m,
549 std::array<StencilType, AMREX_SPACEDIM>& stencil =
DefaultType)
553#if AMREX_SPACEDIM > 1
555#if AMREX_SPACEDIM > 2
562[[nodiscard]] AMREX_FORCE_INLINE
565 const int& i,
const int& j,
const int& k,
570#if AMREX_SPACEDIM > 1
572#if AMREX_SPACEDIM > 2
579[[nodiscard]] AMREX_FORCE_INLINE
582 const int& i,
const int& j,
const int& k,
584 std::array<StencilType, AMREX_SPACEDIM>& stencil =
DefaultType)
590 AMREX_D_TERM(ret(0) += (dw(i + 1, j, k)(0, 0) - dw(i - 1, j, k)(0, 0)) / 2. / DX[0];,
591 ret(1) += (dw(i + 1, j, k)(1, 0) - dw(i - 1, j, k)(1, 0)) / 2. / DX[0];,
592 ret(2) += (dw(i + 1, j, k)(2, 0) - dw(i - 1, j, k)(2, 0)) / 2. / DX[0];)
596 AMREX_D_TERM(ret(0) += (dw(i, j, k)(0, 0) - dw(i - 1, j, k)(0, 0)) / DX[0];,
597 ret(1) += (dw(i, j, k)(1, 0) - dw(i - 1, j, k)(1, 0)) / DX[0];,
598 ret(2) += (dw(i, j, k)(2, 0) - dw(i - 1, j, k)(2, 0)) / DX[0];)
602 AMREX_D_TERM(ret(0) += (dw(i + 1, j, k)(0, 0) - dw(i, j, k)(0, 0)) / DX[0];,
603 ret(1) += (dw(i + 1, j, k)(1, 0) - dw(i, j, k)(1, 0)) / DX[0];,
604 ret(2) += (dw(i + 1, j, k)(2, 0) - dw(i, j, k)(2, 0)) / DX[0];)
607#if AMREX_SPACEDIM > 1
610 AMREX_D_TERM(ret(0) += (dw(i, j + 1, k)(0, 1) - dw(i, j - 1, k)(0, 1)) / 2. / DX[1];,
611 ret(1) += (dw(i, j + 1, k)(1, 1) - dw(i, j - 1, k)(1, 1)) / 2. / DX[1];,
612 ret(2) += (dw(i, j + 1, k)(2, 1) - dw(i, j - 1, k)(2, 1)) / 2. / DX[1];)
616 AMREX_D_TERM(ret(0) += (dw(i, j, k)(0, 1) - dw(i, j - 1, k)(0, 1)) / DX[1];,
617 ret(1) += (dw(i, j, k)(1, 1) - dw(i, j - 1, k)(1, 1)) / DX[1];,
618 ret(2) += (dw(i, j, k)(2, 1) - dw(i, j - 1, k)(2, 1)) / DX[1];)
622 AMREX_D_TERM(ret(0) += (dw(i, j + 1, k)(0, 1) - dw(i, j, k)(0, 1)) / DX[1];,
623 ret(1) += (dw(i, j + 1, k)(1, 1) - dw(i, j, k)(1, 1)) / DX[1];,
624 ret(2) += (dw(i, j + 1, k)(2, 1) - dw(i, j, k)(2, 1)) / DX[1];)
627#if AMREX_SPACEDIM > 2
630 AMREX_D_TERM(ret(0) += (dw(i, j, k + 1)(0, 2) - dw(i, j, k - 1)(0, 2)) / 2. / DX[2];,
631 ret(1) += (dw(i, j, k + 1)(1, 2) - dw(i, j, k - 1)(1, 2)) / 2. / DX[2];,
632 ret(2) += (dw(i, j, k + 1)(2, 2) - dw(i, j, k - 1)(2, 2)) / 2. / DX[2];)
636 AMREX_D_TERM(ret(0) += (dw(i, j, k)(0, 2) - dw(i, j, k - 1)(0, 2)) / DX[2];,
637 ret(1) += (dw(i, j, k)(1, 2) - dw(i, j, k - 1)(1, 2)) / DX[2];,
638 ret(2) += (dw(i, j, k)(2, 2) - dw(i, j, k - 1)(2, 2)) / DX[2];)
642 AMREX_D_TERM(ret(0) += (dw(i, j, k + 1)(0, 2) - dw(i, j, k)(0, 2)) / DX[2];,
643 ret(1) += (dw(i, j, k + 1)(1, 2) - dw(i, j, k)(1, 2)) / DX[2];,
644 ret(2) += (dw(i, j, k + 1)(2, 2) - dw(i, j, k)(2, 2)) / DX[2];)
651[[nodiscard]] AMREX_FORCE_INLINE
654 const int &i,
const int &j,
const int &k,
const int &m,
656 std::array<StencilType,AMREX_SPACEDIM> stencil =
DefaultType)
660#if AMREX_SPACEDIM > 1
663#if AMREX_SPACEDIM > 2
670[[nodiscard]] AMREX_FORCE_INLINE
673 const int& i,
const int& j,
const int& k,
const int& m,
675 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
679#if AMREX_SPACEDIM > 1
681#if AMREX_SPACEDIM > 2
688[[nodiscard]] AMREX_FORCE_INLINE
691 const int& i,
const int& j,
const int& k,
const int& m,
695#if AMREX_SPACEDIM == 1
696 ret(0) = (f(i, j, k, m) - f(i - 1, j, k, m)) / dx[0];
697#elif AMREX_SPACEDIM == 2
698 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];
699 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];
700#elif AMREX_SPACEDIM == 3
701 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];
702 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];
703 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];
710[[nodiscard]] AMREX_FORCE_INLINE
711std::array<T, AMREX_SPACEDIM>
713 const int& i,
const int& j,
const int& k,
const int& m,
716 std::array<T, AMREX_SPACEDIM> ret;
718#if AMREX_SPACEDIM == 1
719 ret[0] = (f(i, j, k, m) - f(i - 1, j, k, m)) / dx[0];
720#elif AMREX_SPACEDIM == 2
721 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];
722 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];
723#elif AMREX_SPACEDIM == 3
724 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];
725 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];
726 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];
733[[nodiscard]] AMREX_FORCE_INLINE
736 const int& i,
const int& j,
const int& k,
738 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
741 ret(0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 0, dx, stencil));
742#if AMREX_SPACEDIM > 1
743 ret(0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 0, dx, stencil));
744 ret(1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 1, dx, stencil));
745 ret(1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 1, dx, stencil));
746#if AMREX_SPACEDIM > 2
747 ret(0, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 0, dx, stencil));
748 ret(2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 2, dx, stencil));
749 ret(1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 1, dx, stencil));
750 ret(2, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 2, dx, stencil));
751 ret(2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 2, dx, stencil));
757[[nodiscard]] AMREX_FORCE_INLINE
760 const int& i,
const int& j,
const int& k,
762 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
766#if AMREX_SPACEDIM > 0
769#if AMREX_SPACEDIM > 1
772#if AMREX_SPACEDIM > 2
779[[nodiscard]] AMREX_FORCE_INLINE
780std::pair<Set::Vector,Set::Matrix>
782 const int& i,
const int& j,
const int& k,
784 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
789 std::pair<Set::Scalar,Set::Vector> ret;
790#if AMREX_SPACEDIM > 0
793 offdiag.col(0) = ret.second;
795#if AMREX_SPACEDIM > 1
798 offdiag.col(1) = ret.second;
800#if AMREX_SPACEDIM > 2
803 offdiag.col(2) = ret.second;
805 return std::make_pair(diag,offdiag);
809[[nodiscard]] AMREX_FORCE_INLINE
812 const int& i,
const int& j,
const int& k,
816#if AMREX_SPACEDIM == 1
817 ret(0) = (f(i + 1, j, k) - f(i, j, k)) / dx[0];
818#elif AMREX_SPACEDIM == 2
819 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];
820 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];
821#elif AMREX_SPACEDIM == 3
822 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];
823 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];
824 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];
829[[nodiscard]] AMREX_FORCE_INLINE
832 const int& i,
const int& j,
const int& k,
836#if AMREX_SPACEDIM == 1
837 ret.col(0) = (f(i + 1, j, k) - f(i, j, k)) / dx[0];
838#elif AMREX_SPACEDIM == 2
839 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];
840 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];
841#elif AMREX_SPACEDIM == 3
842 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];
843 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];
844 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];
849[[nodiscard]] AMREX_FORCE_INLINE
852 const int& i,
const int& j,
const int& k,
const int& m,
856#if AMREX_SPACEDIM == 1
857 ret(0) = (f(i + 1, j, k, m) - f(i, j, k, m)) / dx[0];
858#elif AMREX_SPACEDIM == 2
859 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];
860 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];
861#elif AMREX_SPACEDIM == 3
862 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];
863 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];
864 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];
869[[nodiscard]] AMREX_FORCE_INLINE
872 const int& i,
const int& j,
const int& k,
874 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
878#if AMREX_SPACEDIM > 0
881#if AMREX_SPACEDIM > 1
884#if AMREX_SPACEDIM > 2
890[[nodiscard]] AMREX_FORCE_INLINE
893 const int& i,
const int& j,
const int& k,
898#if AMREX_SPACEDIM > 0
899 ret[0] = (f(i+1,j,k) - f(i,j,k)) / dx[0];
901#if AMREX_SPACEDIM > 1
902 ret[1] = (f(i,j+1,k) - f(i,j,k)) / dx[1];
904#if AMREX_SPACEDIM > 2
905 ret[2] = (f(i,j,k+1) - f(i,j,k)) / dx[2];
912[[nodiscard]] AMREX_FORCE_INLINE
915 const int& i,
const int& j,
const int& k,
917 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
920#if AMREX_SPACEDIM == 1
921 ret[0](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 0, dx, stencil));
922#elif AMREX_SPACEDIM == 2
923 ret[0](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 0, dx, stencil));
924 ret[0](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 0, dx, stencil));
925 ret[0](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 1, dx, stencil));
926 ret[0](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 1, dx, stencil));
927 ret[1](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 2, dx, stencil));
928 ret[1](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 2, dx, stencil));
929 ret[1](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 3, dx, stencil));
930 ret[1](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 3, dx, stencil));
931#elif AMREX_SPACEDIM == 3
932 ret[0](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 0, dx, stencil));
933 ret[0](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 1, dx, stencil));
934 ret[0](2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 2, dx, stencil));
935 ret[1](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 3, dx, stencil));
936 ret[1](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 4, dx, stencil));
937 ret[1](2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 5, dx, stencil));
938 ret[2](0, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 6, dx, stencil));
939 ret[2](1, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 7, dx, stencil));
940 ret[2](2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 0>::D(f, i, j, k, 8, dx, stencil));
941 ret[0](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 0, dx, stencil));
942 ret[0](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 1, dx, stencil));
943 ret[0](2, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 2, dx, stencil));
944 ret[1](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 3, dx, stencil));
945 ret[1](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 4, dx, stencil));
946 ret[1](2, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 5, dx, stencil));
947 ret[2](0, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 6, dx, stencil));
948 ret[2](1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 7, dx, stencil));
949 ret[2](2, 1) = (
Numeric::Stencil<Set::Scalar, 0, 1, 0>::D(f, i, j, k, 8, dx, stencil));
950 ret[0](0, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 0, dx, stencil));
951 ret[0](1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 1, dx, stencil));
952 ret[0](2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 2, dx, stencil));
953 ret[1](0, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 3, dx, stencil));
954 ret[1](1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 4, dx, stencil));
955 ret[1](2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 5, dx, stencil));
956 ret[2](0, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 6, dx, stencil));
957 ret[2](1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 7, dx, stencil));
958 ret[2](2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 1>::D(f, i, j, k, 8, dx, stencil));
964[[nodiscard]] AMREX_FORCE_INLINE
966Hessian(
const amrex::Array4<const Set::Scalar>& f,
967 const int& i,
const int& j,
const int& k,
const int& m,
969 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType
973 ret(0, 0) = (
Numeric::Stencil<Set::Scalar, 2, 0, 0>::D(f, i, j, k, m, dx, stencil));
974#if AMREX_SPACEDIM > 1
975 ret(1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 2, 0>::D(f, i, j, k, m, dx, stencil));
976 ret(0, 1) = (
Numeric::Stencil<Set::Scalar, 1, 1, 0>::D(f, i, j, k, m, dx, stencil));
977 ret(1, 0) = ret(0, 1);
978#if AMREX_SPACEDIM > 2
979 ret(2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 2>::D(f, i, j, k, m, dx, stencil));
980 ret(1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 1, 1>::D(f, i, j, k, m, dx, stencil));
981 ret(2, 0) = (
Numeric::Stencil<Set::Scalar, 1, 0, 1>::D(f, i, j, k, m, dx, stencil));
982 ret(2, 1) = ret(1, 2);
983 ret(0, 2) = ret(2, 0);
989[[nodiscard]] AMREX_FORCE_INLINE
991Hessian(
const amrex::Array4<const Set::Scalar>& f,
992 const int& i,
const int& j,
const int& k,
994 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
999 ret(0, 0, 0) = (
Numeric::Stencil<Set::Scalar, 2, 0, 0>::D(f, i, j, k, 0, DX, stencil));
1003 ret(0, 0, 1) = (
Numeric::Stencil<Set::Scalar, 1, 1, 0>::D(f, i, j, k, 0, DX, stencil));
1004 ret(0, 1, 0) = ret(0, 0, 1);
1005 ret(0, 1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 2, 0>::D(f, i, j, k, 0, DX, stencil));
1006 ret(1, 0, 0) = (
Numeric::Stencil<Set::Scalar, 2, 0, 0>::D(f, i, j, k, 1, DX, stencil));
1007 ret(1, 0, 1) = (
Numeric::Stencil<Set::Scalar, 1, 1, 0>::D(f, i, j, k, 1, DX, stencil));
1008 ret(1, 1, 0) = ret(1, 0, 1);
1009 ret(1, 1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 2, 0>::D(f, i, j, k, 1, DX, stencil));
1013 ret(0, 2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 2>::D(f, i, j, k, 0, DX, stencil));
1014 ret(0, 0, 2) = (
Numeric::Stencil<Set::Scalar, 1, 0, 1>::D(f, i, j, k, 0, DX, stencil));
1015 ret(0, 1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 1, 1>::D(f, i, j, k, 0, DX, stencil));
1016 ret(0, 2, 0) = ret(0, 0, 2);
1017 ret(0, 2, 1) = ret(0, 1, 2);;
1018 ret(1, 2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 2>::D(f, i, j, k, 1, DX, stencil));
1019 ret(1, 0, 2) = (
Numeric::Stencil<Set::Scalar, 1, 0, 1>::D(f, i, j, k, 1, DX, stencil));
1020 ret(1, 1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 1, 1>::D(f, i, j, k, 1, DX, stencil));
1021 ret(1, 2, 0) = ret(1, 0, 2);
1022 ret(1, 2, 1) = ret(1, 1, 2);;
1023 ret(2, 0, 0) = (
Numeric::Stencil<Set::Scalar, 2, 0, 0>::D(f, i, j, k, 2, DX, stencil));
1024 ret(2, 1, 1) = (
Numeric::Stencil<Set::Scalar, 0, 2, 0>::D(f, i, j, k, 2, DX, stencil));
1025 ret(2, 2, 2) = (
Numeric::Stencil<Set::Scalar, 0, 0, 2>::D(f, i, j, k, 2, DX, stencil));
1026 ret(2, 0, 1) = (
Numeric::Stencil<Set::Scalar, 1, 1, 0>::D(f, i, j, k, 2, DX, stencil));
1027 ret(2, 1, 0) = ret(2, 0, 1);
1028 ret(2, 0, 2) = (
Numeric::Stencil<Set::Scalar, 1, 0, 1>::D(f, i, j, k, 2, DX, stencil));
1029 ret(2, 1, 2) = (
Numeric::Stencil<Set::Scalar, 0, 1, 1>::D(f, i, j, k, 2, DX, stencil));
1030 ret(2, 2, 0) = ret(2, 0, 2);
1031 ret(2, 2, 1) = ret(2, 1, 2);;
1039[[nodiscard]] AMREX_FORCE_INLINE
1042 const int& i,
const int& j,
const int& k,
1044 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
1050 ret[0](0, 0) = f_11(0);
1053 ret[1](0, 0) = f_11(1);
1055 ret[0](1, 0) = ret[0](0, 1) = f_12(0);
1056 ret[1](1, 0) = ret[1](0, 1) = f_12(1);
1058 ret[0](1, 1) = f_22(0);
1059 ret[1](1, 1) = f_22(1);
1062 ret[2](0, 0) = f_11(2);
1063 ret[2](1, 0) = ret[2](0, 1) = f_12(2);
1065 ret[0](2, 0) = ret[0](0, 2) = f_13(0);
1066 ret[1](2, 0) = ret[1](0, 2) = f_13(1);
1067 ret[2](2, 0) = ret[2](0, 2) = f_13(2);
1068 ret[2](1, 1) = f_22(2);
1070 ret[0](1, 2) = ret[0](2, 1) = f_23(0);
1071 ret[1](1, 2) = ret[1](2, 1) = f_23(1);
1072 ret[2](1, 2) = ret[2](2, 1) = f_23(2);
1074 ret[0](2, 2) = f_33(0);
1075 ret[1](2, 2) = f_33(1);
1076 ret[2](2, 2) = f_33(2);
1082[[nodiscard]] AMREX_FORCE_INLINE
1085 const int& i,
const int& j,
const int& k)
1088#if AMREX_SPACEDIM == 1
1089 ret(0, 0) = f(i, j, k, 0);
1091#elif AMREX_SPACEDIM == 2
1092 ret(0, 0) = f(i, j, k, 0); ret(0, 1) = f(i, j, k, 1);
1093 ret(1, 0) = f(i, j, k, 2); ret(1, 1) = f(i, j, k, 3);
1095#elif AMREX_SPACEDIM == 3
1096 ret(0, 0) = f(i, j, k, 0); ret(0, 1) = f(i, j, k, 1); ret(0, 2) = f(i, j, k, 2);
1097 ret(1, 0) = f(i, j, k, 3); ret(1, 1) = f(i, j, k, 4); ret(1, 2) = f(i, j, k, 5);
1098 ret(2, 0) = f(i, j, k, 6); ret(2, 1) = f(i, j, k, 7); ret(2, 2) = f(i, j, k, 8);
1104[[nodiscard]] AMREX_FORCE_INLINE
1107 const int& i,
const int& j,
const int& k)
1110#if AMREX_SPACEDIM == 1
1111 ret(0, 0) = f(i, j, k, 0);
1113#elif AMREX_SPACEDIM == 2
1114 ret(0, 0) = f(i, j, k, 0); ret(0, 1) = f(i, j, k, 1);
1115 ret(1, 0) = f(i, j, k, 2); ret(1, 1) = f(i, j, k, 3);
1117#elif AMREX_SPACEDIM == 3
1118 ret(0, 0) = f(i, j, k, 0); ret(0, 1) = f(i, j, k, 1); ret(0, 2) = f(i, j, k, 2);
1119 ret(1, 0) = f(i, j, k, 3); ret(1, 1) = f(i, j, k, 4); ret(1, 2) = f(i, j, k, 5);
1120 ret(2, 0) = f(i, j, k, 6); ret(2, 1) = f(i, j, k, 7); ret(2, 2) = f(i, j, k, 8);
1126[[nodiscard]] AMREX_FORCE_INLINE
1129 const int& i,
const int& j,
const int& k)
1132 ret(0) = f(i, j, k, 0);
1133#if AMREX_SPACEDIM > 1
1134 ret(1) = f(i, j, k, 1);
1135#if AMREX_SPACEDIM > 2
1136 ret(2) = f(i, j, k, 2);
1142[[nodiscard]] AMREX_FORCE_INLINE
1145 const int& i,
const int& j,
const int& k)
1148 ret(0) = f(i, j, k, 0);
1149#if AMREX_SPACEDIM > 1
1150 ret(1) = f(i, j, k, 1);
1151#if AMREX_SPACEDIM > 2
1152 ret(2) = f(i, j, k, 2);
1161 const int& i,
const int& j,
const int& k,
1164#if AMREX_SPACEDIM == 1
1165 f(i, j, k, 0) = matrix(0, 0);
1166#elif AMREX_SPACEDIM == 2
1167 f(i, j, k, 0) = matrix(0, 0); f(i, j, k, 1) = matrix(0, 1);
1168 f(i, j, k, 2) = matrix(1, 0); f(i, j, k, 3) = matrix(1, 1);
1169#elif AMREX_SPACEDIM == 3
1170 f(i, j, k, 0) = matrix(0, 0); f(i, j, k, 1) = matrix(0, 1); f(i, j, k, 2) = matrix(0, 2);
1171 f(i, j, k, 3) = matrix(1, 0); f(i, j, k, 4) = matrix(1, 1); f(i, j, k, 5) = matrix(1, 2);
1172 f(i, j, k, 6) = matrix(2, 0); f(i, j, k, 7) = matrix(2, 1); f(i, j, k, 8) = matrix(2, 2);
1179 const int& i,
const int& j,
const int& k,
1182 f(i, j, k, 0) = vector(0);
1183#if AMREX_SPACEDIM > 1
1184 f(i, j, k, 1) = vector(1);
1185#if AMREX_SPACEDIM > 2
1186 f(i, j, k, 2) = vector(2);
1191template<
int index,
int SYM>
1195 const int,
const int,
const int,
const Set::Scalar[AMREX_SPACEDIM],
1196 std::array<StencilType, AMREX_SPACEDIM> =
DefaultType)
1202[[nodiscard]] AMREX_FORCE_INLINE
1204 const int i,
const int j,
const int k,
const Set::Scalar dx[AMREX_SPACEDIM],
1205 std::array<StencilType, AMREX_SPACEDIM> stencil)
1210 Numeric::Stencil<Set::Matrix4<AMREX_SPACEDIM, Set::Sym::Isotropic>, 1, 0, 0>::D(C, i, j, k, 0, dx, stencil);
1213 Numeric::Stencil<Set::Matrix4<AMREX_SPACEDIM, Set::Sym::Isotropic>, 0, 1, 0>::D(C, i, j, k, 0, dx, stencil);
1217 Numeric::Stencil<Set::Matrix4<AMREX_SPACEDIM, Set::Sym::Isotropic>, 0, 0, 1>::D(C, i, j, k, 0, dx, stencil);
1220 for (
int i = 0; i < AMREX_SPACEDIM; i++)
1221 for (
int k = 0; k < AMREX_SPACEDIM; k++)
1222 for (
int l = 0; l < AMREX_SPACEDIM; l++)
1225 ret(i, k, l) = gradCx(i, 0, k, l);
1227 ret(i, k, l) = gradCy(i, 1, k, l);
1230 ret(i, k, l) = gradCz(i, 2, k, l);
1240[[nodiscard]] AMREX_FORCE_INLINE
1243 const int& i,
const int& j,
const int& k,
const int& m,
1247[[nodiscard]] AMREX_FORCE_INLINE
1250 const int& i,
const int& j,
const int& k,
const int& m,
1255 ret(0, 0, 0, 0) =
Stencil<Set::Scalar, 4, 0, 0>::D(f, i, j, k, m, dx);
1257 ret(0, 0, 0, 1) =
Stencil<Set::Scalar, 3, 1, 0>::D(f, i, j, k, m, dx);
1259 ret(0, 0, 1, 1) =
Stencil<Set::Scalar, 2, 2, 0>::D(f, i, j, k, m, dx);
1261 ret(0, 1, 1, 1) =
Stencil<Set::Scalar, 1, 3, 0>::D(f, i, j, k, m, dx);
1263 ret(1, 1, 1, 1) =
Stencil<Set::Scalar, 0, 4, 0>::D(f, i, j, k, m, dx);
1268[[nodiscard]] AMREX_FORCE_INLINE
1271 const int& i,
const int& j,
const int& k,
const int& m,
1276 ret(0, 0, 0, 0) =
Stencil<Set::Scalar, 4, 0, 0>::D(f, i, j, k, m, dx);
1278 ret(0, 0, 0, 1) =
Stencil<Set::Scalar, 3, 1, 0>::D(f, i, j, k, m, dx);
1280 ret(0, 0, 0, 2) =
Stencil<Set::Scalar, 3, 0, 1>::D(f, i, j, k, m, dx);
1282 ret(0, 0, 1, 1) =
Stencil<Set::Scalar, 2, 2, 0>::D(f, i, j, k, m, dx);
1284 ret(0, 0, 1, 2) =
Stencil<Set::Scalar, 2, 1, 1>::D(f, i, j, k, m, dx);
1286 ret(0, 0, 2, 2) =
Stencil<Set::Scalar, 2, 0, 2>::D(f, i, j, k, m, dx);
1288 ret(0, 1, 1, 1) =
Stencil<Set::Scalar, 1, 3, 0>::D(f, i, j, k, m, dx);
1290 ret(0, 1, 1, 2) =
Stencil<Set::Scalar, 1, 2, 1>::D(f, i, j, k, m, dx);
1292 ret(0, 1, 2, 2) =
Stencil<Set::Scalar, 1, 1, 2>::D(f, i, j, k, m, dx);
1294 ret(0, 2, 2, 2) =
Stencil<Set::Scalar, 1, 0, 3>::D(f, i, j, k, m, dx);
1296 ret(1, 1, 1, 1) =
Stencil<Set::Scalar, 0, 4, 0>::D(f, i, j, k, m, dx);
1298 ret(1, 1, 1, 2) =
Stencil<Set::Scalar, 0, 3, 1>::D(f, i, j, k, m, dx);
1300 ret(1, 1, 2, 2) =
Stencil<Set::Scalar, 0, 2, 2>::D(f, i, j, k, m, dx);
1302 ret(1, 2, 2, 2) =
Stencil<Set::Scalar, 0, 1, 3>::D(f, i, j, k, m, dx);
1304 ret(2, 2, 2, 2) =
Stencil<Set::Scalar, 0, 0, 4>::D(f, i, j, k, m, dx);
1312 [[nodiscard]] AMREX_FORCE_INLINE
1314 const int& i,
const int& j,
const int& k,
const int& m,
1315 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
1322 return (AMREX_D_TERM(f(i, j, k, m) + f(i - ilo, j, k, m)
1324 +f(i, j - jlo, k, m) + f(i - ilo, j - jlo, k, m)
1326 +f(i, j, k - klo, m) + f(i - ilo, j, k - klo, m)
1327 + f(i, j - jlo, k - klo, m) + f(i - ilo, j - jlo, k - klo, m)
1331 [[nodiscard]] AMREX_FORCE_INLINE
1333 const int& i,
const int& j,
const int& k,
const int& m,
1334 std::array<StencilType, AMREX_SPACEDIM> stencil =
DefaultType)
1341 return (AMREX_D_TERM(f(i, j, k, m) + f(i - ilo, j, k, m)
1343 +f(i, j - jlo, k, m) + f(i - ilo, j - jlo, k, m)
1345 +f(i, j, k - klo, m) + f(i - ilo, j, k - klo, m)
1346 + f(i, j - jlo, k - klo, m) + f(i - ilo, j - jlo, k - klo, m)
1350 [[nodiscard]] AMREX_FORCE_INLINE
1352 const int& i,
const int& j,
const int& k,
const int& m)
1354 return (AMREX_D_TERM(f(i, j, k, m) + f(i + 1, j, k, m)
1356 +f(i, j + 1, k, m) + f(i + 1, j + 1, k, m)
1358 +f(i, j, k + 1, m) + f(i + 1, j, k + 1, m)
1359 + f(i, j + 1, k + 1, m) + f(i + 1, j + 1, k + 1, m)
1363 [[nodiscard]] AMREX_FORCE_INLINE
1365 const int& i,
const int& j,
const int& k,
const int& m)
1367 return (AMREX_D_TERM(f(i, j, k, m) + f(i + 1, j, k, m)
1369 +f(i, j + 1, k, m) + f(i + 1, j + 1, k, m)
1371 +f(i, j, k + 1, m) + f(i + 1, j, k + 1, m)
1372 + 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])