1 #ifndef AMREX_MLEBABECLAP_K_H_
2 #define AMREX_MLEBABECLAP_K_H_
3 #include <AMReX_Config.H>
12 return amrex::max(Real(0.3),(kappa*kappa-Real(0.25))/(Real(2.0)*kappa));
16 #if (AMREX_SPACEDIM == 2)
34 int maxorder, Real dxinv,
int inhomog,
int icomp) noexcept
39 const int s = 1-2*side;
43 for (
int k = lo.z; k <= hi.z; ++k) {
44 for (
int j = lo.y; j <= hi.y; ++j) {
45 if (
mask(i,j,k) == 0 &&
mask(i+s,j,k) == 1) {
46 phi(i,j,k,icomp) = phi(i+s,j,k,icomp);
54 for (
int k = lo.z; k <= hi.z; ++k) {
55 for (
int j = lo.y; j <= hi.y; ++j) {
56 if (
mask(i,j,k) == 0 &&
mask(i+s,j,k) == 1) {
57 phi(i,j,k,icomp) = -phi(i+s,j,k,icomp);
68 for (
int r = 0;
r <= maxorder-2; ++
r) {
71 for (
int k = lo.z; k <= hi.z; ++k) {
72 for (
int j = lo.y; j <= hi.y; ++j) {
73 if (
mask(i,j,k) == 0 &&
mask(i+s,j,k) == 1) {
75 bool has_cutfaces =
false;
76 for (
int r = 0;
r <= NX-2; ++
r) {
77 Real a = area(i+(1-side)+s*
r,j,k);
87 if (has_cutfaces) { order =
amrex::min(2,order); }
90 phi(i,j,k,icomp) = bcval(i,j,k,icomp);
92 phi(i,j,k,icomp) = Real(0.0);
96 for (
int m = 1; m < order; ++m) {
97 tmp += phi(i+m*s,j,k,icomp) * coef(m,order-2);
99 phi(i,j,k,icomp) = tmp;
101 phi(i,j,k,icomp) += bcval(i,j,k,icomp)*coef(0,order-2);
120 int maxorder, Real dyinv,
int inhomog,
int icomp) noexcept
125 const int s = 1-2*side;
129 for (
int k = lo.z; k <= hi.z; ++k) {
130 for (
int i = lo.x; i <= hi.x; ++i) {
131 if (
mask(i,j,k) == 0 &&
mask(i,j+s,k) == 1) {
132 phi(i,j,k,icomp) = phi(i,j+s,k,icomp);
140 for (
int k = lo.z; k <= hi.z; ++k) {
141 for (
int i = lo.x; i <= hi.x; ++i) {
142 if (
mask(i,j,k) == 0 &&
mask(i,j+s,k) == 1) {
143 phi(i,j,k,icomp) = -phi(i,j+s,k,icomp);
154 for (
int r = 0;
r <= maxorder-2; ++
r) {
157 for (
int k = lo.z; k <= hi.z; ++k) {
158 for (
int i = lo.x; i <= hi.x; ++i) {
159 if (
mask(i,j,k) == 0 &&
mask(i,j+s,k) == 1) {
161 bool has_cutfaces =
false;
162 for (
int r = 0;
r <= NX-2; ++
r) {
163 Real a = area(i,j+(1-side)+s*
r,k);
173 if (has_cutfaces) { order =
amrex::min(2,order); }
176 phi(i,j,k,icomp) = bcval(i,j,k,icomp);
178 phi(i,j,k,icomp) = Real(0.0);
181 Real tmp = Real(0.0);
182 for (
int m = 1; m < order; ++m) {
183 tmp += phi(i,j+m*s,k,icomp) * coef(m,order-2);
185 phi(i,j,k,icomp) = tmp;
187 phi(i,j,k,icomp) += bcval(i,j,k,icomp)*coef(0,order-2);
206 int maxorder, Real dzinv,
int inhomog,
int icomp) noexcept
211 const int s = 1-2*side;
215 for (
int j = lo.y; j <= hi.y; ++j) {
216 for (
int i = lo.x; i <= hi.x; ++i) {
217 if (
mask(i,j,k) == 0 &&
mask(i,j,k+s) == 1) {
218 phi(i,j,k,icomp) = phi(i,j,k+s,icomp);
226 for (
int j = lo.y; j <= hi.y; ++j) {
227 for (
int i = lo.x; i <= hi.x; ++i) {
228 if (
mask(i,j,k) == 0 &&
mask(i,j,k+s) == 1) {
229 phi(i,j,k,icomp) = -phi(i,j,k+s,icomp);
240 for (
int r = 0;
r <= maxorder-2; ++
r) {
243 for (
int j = lo.y; j <= hi.y; ++j) {
244 for (
int i = lo.x; i <= hi.x; ++i) {
245 if (
mask(i,j,k) == 0 &&
mask(i,j,k+s) == 1) {
247 bool has_cutfaces =
false;
248 for (
int r = 0;
r <= NX-2; ++
r) {
249 Real a = area(i,j,k+(1-side)+s*
r);
259 if (has_cutfaces) { order =
amrex::min(2,order); }
262 phi(i,j,k,icomp) = bcval(i,j,k,icomp);
264 phi(i,j,k,icomp) = Real(0.0);
267 Real tmp = Real(0.0);
268 for (
int m = 1; m < order; ++m) {
269 tmp += phi(i,j,k+m*s,icomp) * coef(m,order-2);
271 phi(i,j,k,icomp) = tmp;
273 phi(i,j,k,icomp) += bcval(i,j,k,icomp)*coef(0,order-2);
#define AMREX_FORCE_INLINE
Definition: AMReX_Extension.H:119
#define AMREX_GPU_HOST_DEVICE
Definition: AMReX_GpuQualifiers.H:20
Array4< int const > mask
Definition: AMReX_InterpFaceRegister.cpp:93
#define AMREX_LO_NEUMANN
Definition: AMReX_LO_BCTYPES.H:6
#define AMREX_LO_DIRICHLET
Definition: AMReX_LO_BCTYPES.H:5
#define AMREX_LO_REFLECT_ODD
Definition: AMReX_LO_BCTYPES.H:7
Maintain an identifier for boundary condition types.
Definition: AMReX_BoundCond.H:20
Definition: AMReX_Amr.cpp:49
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlebabeclap_apply_bc_z(int side, Box const &box, int blen, Array4< Real > const &phi, Array4< int const > const &mask, Array4< Real const > const &area, BoundCond bct, Real bcl, Array4< Real const > const &bcval, int maxorder, Real dzinv, int inhomog, int icomp) noexcept
Definition: AMReX_MLEBABecLap_K.H:200
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlebabeclap_apply_bc_y(int side, Box const &box, int blen, Array4< Real > const &phi, Array4< int const > const &mask, Array4< Real const > const &area, BoundCond bct, Real bcl, Array4< Real const > const &bcval, int maxorder, Real dyinv, int inhomog, int icomp) noexcept
Definition: AMReX_MLEBABecLap_K.H:114
AMREX_GPU_HOST_DEVICE constexpr AMREX_FORCE_INLINE const T & max(const T &a, const T &b) noexcept
Definition: AMReX_Algorithm.H:35
AMREX_GPU_HOST_DEVICE constexpr AMREX_FORCE_INLINE const T & min(const T &a, const T &b) noexcept
Definition: AMReX_Algorithm.H:21
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void poly_interp_coeff(T xInt, T const *AMREX_RESTRICT x, int N, T *AMREX_RESTRICT c) noexcept
Definition: AMReX_LOUtil_K.H:24
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Dim3 ubound(Array4< T > const &a) noexcept
Definition: AMReX_Array4.H:315
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Dim3 lbound(Array4< T > const &a) noexcept
Definition: AMReX_Array4.H:308
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE Real get_dx_eb(Real kappa) noexcept
Definition: AMReX_MLEBABecLap_K.H:11
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlebabeclap_apply_bc_x(int side, Box const &box, int blen, Array4< Real > const &phi, Array4< int const > const &mask, Array4< Real const > const &area, BoundCond bct, Real bcl, Array4< Real const > const &bcval, int maxorder, Real dxinv, int inhomog, int icomp) noexcept
Definition: AMReX_MLEBABecLap_K.H:28
Definition: AMReX_Array.H:285
Definition: AMReX_Array4.H:61
Definition: AMReX_Array.H:33