7 #ifndef DISTANCETOEB_H_
8 #define DISTANCETOEB_H_
17 namespace DistanceToEB
23 return AMREX_D_TERM(a[0]*b[0], + a[1]*b[1], + a[2]*b[2]);
29 amrex::Real inv_norm = 1.0/std::sqrt(
dot_product(a,a));
36 amrex::RealVect interp_normal (
int i,
int j,
int k,
const amrex::Real W[AMREX_SPACEDIM][2],
40 #if (defined WARPX_DIM_3D)
43 normal[0] -= phi(
i, j , k ) * dxi[0] * W[1][0] * W[2][0];
44 normal[0] += phi(
i+1, j , k ) * dxi[0] * W[1][0] * W[2][0];
45 normal[0] -= phi(
i, j+1, k ) * dxi[0] * W[1][1] * W[2][0];
46 normal[0] += phi(
i+1, j+1, k ) * dxi[0] * W[1][1] * W[2][0];
47 normal[0] -= phi(
i, j , k+1) * dxi[0] * W[1][0] * W[2][1];
48 normal[0] += phi(
i+1, j , k+1) * dxi[0] * W[1][0] * W[2][1];
49 normal[0] -= phi(
i , j+1, k+1) * dxi[0] * W[1][1] * W[2][1];
50 normal[0] += phi(
i+1, j+1, k+1) * dxi[0] * W[1][1] * W[2][1];
52 normal[1] -= phi(
i, j , k ) * dxi[1] * W[0][0] * W[2][0];
53 normal[1] += phi(
i , j+1, k ) * dxi[1] * W[0][0] * W[2][0];
54 normal[1] -= phi(
i+1, j , k ) * dxi[1] * W[0][1] * W[2][0];
55 normal[1] += phi(
i+1, j+1, k ) * dxi[1] * W[0][1] * W[2][0];
56 normal[1] -= phi(
i, j , k+1) * dxi[1] * W[0][0] * W[2][1];
57 normal[1] += phi(
i , j+1, k+1) * dxi[1] * W[0][0] * W[2][1];
58 normal[1] -= phi(
i+1, j , k+1) * dxi[1] * W[0][1] * W[2][1];
59 normal[1] += phi(
i+1, j+1, k+1) * dxi[1] * W[0][1] * W[2][1];
61 normal[2] -= phi(
i , j , k ) * dxi[2] * W[0][0] * W[1][0];
62 normal[2] += phi(
i , j , k+1) * dxi[2] * W[0][0] * W[1][0];
63 normal[2] -= phi(
i+1, j , k ) * dxi[2] * W[0][1] * W[1][0];
64 normal[2] += phi(
i+1, j , k+1) * dxi[2] * W[0][1] * W[1][0];
65 normal[2] -= phi(
i, j+1, k ) * dxi[2] * W[0][0] * W[1][1];
66 normal[2] += phi(
i , j+1, k+1) * dxi[2] * W[0][0] * W[1][1];
67 normal[2] -= phi(
i+1, j+1, k ) * dxi[2] * W[0][1] * W[1][1];
68 normal[2] += phi(
i+1, j+1, k+1) * dxi[2] * W[0][1] * W[1][1];
69 #elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
72 normal[0] -= phi(
i, j , k) * dxi[0] * W[1][0];
73 normal[0] += phi(
i+1, j , k) * dxi[0] * W[1][0];
74 normal[0] -= phi(
i, j+1, k) * dxi[0] * W[1][1];
75 normal[0] += phi(
i+1, j+1, k) * dxi[0] * W[1][1];
77 normal[1] -= phi(
i, j , k) * dxi[1] * W[0][0];
78 normal[1] += phi(
i , j+1, k) * dxi[1] * W[0][0];
79 normal[1] -= phi(
i+1, j , k) * dxi[1] * W[0][1];
80 normal[1] += phi(
i+1, j+1, k) * dxi[1] * W[0][1];
84 amrex::Abort(
"Error: interp_distance not yet implemented in 1D");
#define AMREX_GPU_HOST_DEVICE
#define AMREX_D_TERM(a, b, c)
#define AMREX_D_DECL(a, b, c)
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Real dot_product(XDim3 const &a, XDim3 const &b)
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void ignore_unused(const Ts &...)
void Abort(const std::string &msg)
i
Definition: check_interp_points_and_weights.py:174