1#ifndef AMREX_MLEBNODEFDLAP_3D_K_H_
2#define AMREX_MLEBNODEFDLAP_3D_K_H_
39 if (levset(i+1,j,k) <
Real(0.0)) {
40 tmp =
x(i+1,j,k) -
x(i,j,k);
42 tmp = (xeb(i+1,j,k) -
x(i,j,k)) / hp;
46 if (levset(i-1,j,k) <
Real(0.0)) {
47 tmp +=
x(i-1,j,k) -
x(i,j,k);
49 tmp += (xeb(i-1,j,k) -
x(i,j,k)) / hm;
52 out = tmp * bx *
Real(2.0) / (hp+hm);
56 if (levset(i,j+1,k) <
Real(0.0)) {
57 tmp =
x(i,j+1,k) -
x(i,j,k);
59 tmp = (xeb(i,j+1,k) -
x(i,j,k)) / hp;
63 if (levset(i,j-1,k) <
Real(0.0)) {
64 tmp +=
x(i,j-1,k) -
x(i,j,k);
66 tmp += (xeb(i,j-1,k) -
x(i,j,k)) / hm;
69 out += tmp * by *
Real(2.0) / (hp+hm);
73 if (levset(i,j,k+1) <
Real(0.0)) {
74 tmp =
x(i,j,k+1) -
x(i,j,k);
76 tmp = (xeb(i,j,k+1) -
x(i,j,k)) / hp;
80 if (levset(i,j,k-1) <
Real(0.0)) {
81 tmp +=
x(i,j,k-1) -
x(i,j,k);
83 tmp += (xeb(i,j,k-1) -
x(i,j,k)) / hm;
86 out += tmp * bz *
Real(2.0) / (hp+hm);
101 mlebndfdlap_adotx_eb_doit(i, j, k,
y,
x, levset, dmsk,
ecx,
ecy,
ecz,
102 [=] (
int,
int,
int) ->
Real {
return xeb; },
114 mlebndfdlap_adotx_eb_doit(i, j, k,
y,
x, levset, dmsk,
ecx,
ecy,
ecz,
115 [=] (
int i1,
int i2,
int i3) ->
Real {
116 return xeb(i1,i2,i3); },
126 y(i,j,k) =
Real(0.0);
128 y(i,j,k) = bx * (
x(i-1,j,k) +
x(i+1,j,k))
129 + by * (
x(i,j-1,k) +
x(i,j+1,k))
130 + bz * (
x(i,j,k-1) +
x(i,j,k+1))
131 - (
Real(2.0)*(bx+by+bz)) *
x(i,j,k);
141 int redblack)
noexcept
143 if ((i+j+k+redblack)%2 == 0) {
150 if (levset(i+1,j,k) <
Real(0.0)) {
154 tmp0 =
Real(-1.0) / hp;
159 if (levset(i-1,j,k) <
Real(0.0)) {
163 tmp0 +=
Real(-1.0) / hm;
166 Real gamma = tmp0 * (bx *
Real(2.0) / (hp+hm));
167 Real rho = tmp1 * (bx *
Real(2.0) / (hp+hm));
171 if (levset(i,j+1,k) <
Real(0.0)) {
175 tmp0 =
Real(-1.0) / hp;
180 if (levset(i,j-1,k) <
Real(0.0)) {
184 tmp0 +=
Real(-1.0) / hm;
187 gamma += tmp0 * (by *
Real(2.0) / (hp+hm));
188 rho += tmp1 * (by *
Real(2.0) / (hp+hm));
192 if (levset(i,j,k+1) <
Real(0.0)) {
196 tmp0 =
Real(-1.0) / hp;
201 if (levset(i,j,k-1) <
Real(0.0)) {
205 tmp0 +=
Real(-1.0) / hm;
208 gamma += tmp0 * (bz *
Real(2.0) / (hp+hm));
209 rho += tmp1 * (bz *
Real(2.0) / (hp+hm));
212 Real Ax = rho + gamma*
x(i,j,k);
214 x(i,j,k) += (rhs(i,j,k) - Ax*
scale) * (omega / (gamma*
scale));
224 if ((i+j+k+redblack)%2 == 0) {
229 Real Ax = bx * (
x(i-1,j,k) +
x(i+1,j,k))
230 + by * (
x(i,j-1,k) +
x(i,j+1,k))
231 + bz * (
x(i,j,k-1) +
x(i,j,k+1))
234 x(i,j,k) += (rhs(i,j,k) - Ax) * (omega / gamma);
247 y(i,j,k) =
Real(0.0);
249 Real sigxm =
Real(0.25)*(sig(i-1,j-1,k-1) +
253 Real sigxp =
Real(0.25)*(sig(i ,j-1,k-1) +
257 Real sigym =
Real(0.25)*(sig(i-1,j-1,k-1) +
261 Real sigyp =
Real(0.25)*(sig(i-1,j ,k-1) +
265 Real sigzm =
Real(0.25)*(sig(i-1,j-1,k-1) +
269 Real sigzp =
Real(0.25)*(sig(i-1,j-1,k ) +
273 y(i,j,k) = bx * (sigxm*
x(i-1,j,k) + sigxp*
x(i+1,j,k))
274 + by * (sigym*
x(i,j-1,k) + sigyp*
x(i,j+1,k))
275 + bz * (sigzm*
x(i,j,k-1) + sigzp*
x(i,j,k+1))
276 - (bx*(sigxm+sigxp) + by*(sigym+sigyp) + bz*(sigzm+sigzp)) *
x(i,j,k);
287 if ((i+j+k+redblack)%2 == 0) {
291 Real sigxm =
Real(0.25)*(sig(i-1,j-1,k-1) +
295 Real sigxp =
Real(0.25)*(sig(i ,j-1,k-1) +
299 Real sigym =
Real(0.25)*(sig(i-1,j-1,k-1) +
303 Real sigyp =
Real(0.25)*(sig(i-1,j ,k-1) +
307 Real sigzm =
Real(0.25)*(sig(i-1,j-1,k-1) +
311 Real sigzp =
Real(0.25)*(sig(i-1,j-1,k ) +
315 Real gamma = -(bx*(sigxm+sigxp) + by*(sigym+sigyp) + bz*(sigzm+sigzp));
316 Real Ax = bx * (sigxm*
x(i-1,j,k) + sigxp*
x(i+1,j,k))
317 + by * (sigym*
x(i,j-1,k) + sigyp*
x(i,j+1,k))
318 + bz * (sigzm*
x(i,j,k-1) + sigzp*
x(i,j,k+1))
321 x(i,j,k) += (rhs(i,j,k) - Ax) * (omega / gamma);
341 y(i,j,k) =
Real(0.0);
346 sigma = (sig(i ,j-1,k-1) * vfrc(i ,j-1,k-1) +
347 sig(i ,j ,k-1) * vfrc(i ,j ,k-1) +
348 sig(i ,j-1,k ) * vfrc(i ,j-1,k ) +
349 sig(i ,j ,k ) * vfrc(i ,j ,k ))
350 / ( vfrc(i ,j-1,k-1) +
355 if (levset(i+1,j,k) <
Real(0.0)) {
356 tmp = sigma*(
x(i+1,j,k) -
x(i,j,k));
358 tmp = sigma*((xeb(i+1,j,k) -
x(i,j,k)) / hp);
361 sigma = (sig(i-1,j-1,k-1) * vfrc(i-1,j-1,k-1) +
362 sig(i-1,j ,k-1) * vfrc(i-1,j ,k-1) +
363 sig(i-1,j-1,k ) * vfrc(i-1,j-1,k ) +
364 sig(i-1,j ,k ) * vfrc(i-1,j ,k ))
365 / ( vfrc(i-1,j-1,k-1) +
370 if (levset(i-1,j,k) <
Real(0.0)) {
371 tmp += sigma*(
x(i-1,j,k) -
x(i,j,k));
373 tmp += sigma*((xeb(i-1,j,k) -
x(i,j,k)) / hm);
376 out = tmp * bx *
Real(2.0) / (hp+hm);
379 sigma = (sig(i-1,j ,k-1) * vfrc(i-1,j ,k-1) +
380 sig(i ,j ,k-1) * vfrc(i ,j ,k-1) +
381 sig(i-1,j ,k ) * vfrc(i-1,j ,k ) +
382 sig(i ,j ,k ) * vfrc(i ,j ,k ))
383 / ( vfrc(i-1,j ,k-1) +
388 if (levset(i,j+1,k) <
Real(0.0)) {
389 tmp = sigma*(
x(i,j+1,k) -
x(i,j,k));
391 tmp = sigma*((xeb(i,j+1,k) -
x(i,j,k)) / hp);
394 sigma = (sig(i-1,j-1,k-1) * vfrc(i-1,j-1,k-1) +
395 sig(i ,j-1,k-1) * vfrc(i ,j-1,k-1) +
396 sig(i-1,j-1,k ) * vfrc(i-1,j-1,k ) +
397 sig(i ,j-1,k ) * vfrc(i ,j-1,k ))
398 / ( vfrc(i-1,j-1,k-1) +
403 if (levset(i,j-1,k) <
Real(0.0)) {
404 tmp += sigma*(
x(i,j-1,k) -
x(i,j,k));
406 tmp += sigma*((xeb(i,j-1,k) -
x(i,j,k)) / hm);
409 out += tmp * by *
Real(2.0) / (hp+hm);
412 sigma = (sig(i-1,j-1,k ) * vfrc(i-1,j-1,k ) +
413 sig(i ,j-1,k ) * vfrc(i ,j-1,k ) +
414 sig(i-1,j ,k ) * vfrc(i-1,j ,k ) +
415 sig(i ,j ,k ) * vfrc(i ,j ,k ))
416 / ( vfrc(i-1,j-1,k ) +
421 if (levset(i,j,k+1) <
Real(0.0)) {
422 tmp = sigma*(
x(i,j,k+1) -
x(i,j,k));
424 tmp = sigma*((xeb(i,j,k+1) -
x(i,j,k)) / hp);
427 sigma = (sig(i-1,j-1,k-1) * vfrc(i-1,j-1,k-1) +
428 sig(i ,j-1,k-1) * vfrc(i ,j-1,k-1) +
429 sig(i-1,j ,k-1) * vfrc(i-1,j ,k-1) +
430 sig(i ,j ,k-1) * vfrc(i ,j ,k-1))
431 / ( vfrc(i-1,j-1,k-1) +
436 if (levset(i,j,k-1) <
Real(0.0)) {
437 tmp += sigma*(
x(i,j,k-1) -
x(i,j,k));
439 tmp += sigma*((xeb(i,j,k-1) -
x(i,j,k)) / hm);
442 out += tmp * bz *
Real(2.0) / (hp+hm);
461 mlebndfdlap_sig_adotx_eb_doit(i, j, k,
y,
x, levset, dmsk,
ecx,
ecy,
ecz, sig, vfrc,
462 [=] (
int,
int,
int) ->
Real {
return xeb; },
479 mlebndfdlap_sig_adotx_eb_doit(i, j, k,
y,
x, levset, dmsk,
ecx,
ecy,
ecz, sig, vfrc,
480 [=] (
int i1,
int i2,
int i3) ->
Real {
481 return xeb(i1,i2,i3); },
497 if ((i+j+k+redblack)%2 == 0) {
501 Real tmp0, tmp1, sigma;
504 sigma = (sig(i ,j-1,k-1) * vfrc(i ,j-1,k-1) +
505 sig(i ,j ,k-1) * vfrc(i ,j ,k-1) +
506 sig(i ,j-1,k ) * vfrc(i ,j-1,k ) +
507 sig(i ,j ,k ) * vfrc(i ,j ,k ))
508 / ( vfrc(i ,j-1,k-1) +
513 if (levset(i+1,j,k) <
Real(0.0)) {
514 tmp0 = sigma*
Real(-1.0);
515 tmp1 = sigma*
x(i+1,j,k);
517 tmp0 = sigma*
Real(-1.0) / hp;
521 sigma = (sig(i-1,j-1,k-1) * vfrc(i-1,j-1,k-1) +
522 sig(i-1,j ,k-1) * vfrc(i-1,j ,k-1) +
523 sig(i-1,j-1,k ) * vfrc(i-1,j-1,k ) +
524 sig(i-1,j ,k ) * vfrc(i-1,j ,k ))
525 / ( vfrc(i-1,j-1,k-1) +
530 if (levset(i-1,j,k) <
Real(0.0)) {
531 tmp0 += sigma*
Real(-1.0);
532 tmp1 += sigma*
x(i-1,j,k);
534 tmp0 += sigma*
Real(-1.0) / hm;
537 Real gamma = tmp0 * (bx *
Real(2.0) / (hp+hm));
538 Real rho = tmp1 * (bx *
Real(2.0) / (hp+hm));
541 sigma = (sig(i-1,j ,k-1) * vfrc(i-1,j ,k-1) +
542 sig(i ,j ,k-1) * vfrc(i ,j ,k-1) +
543 sig(i-1,j ,k ) * vfrc(i-1,j ,k ) +
544 sig(i ,j ,k ) * vfrc(i ,j ,k ))
545 / ( vfrc(i-1,j ,k-1) +
550 if (levset(i,j+1,k) <
Real(0.0)) {
551 tmp0 = sigma*
Real(-1.0);
552 tmp1 = sigma*
x(i,j+1,k);
554 tmp0 = sigma*
Real(-1.0) / hp;
558 sigma = (sig(i-1,j-1,k-1) * vfrc(i-1,j-1,k-1) +
559 sig(i ,j-1,k-1) * vfrc(i ,j-1,k-1) +
560 sig(i-1,j-1,k ) * vfrc(i-1,j-1,k ) +
561 sig(i ,j-1,k ) * vfrc(i ,j-1,k ))
562 / ( vfrc(i-1,j-1,k-1) +
567 if (levset(i,j-1,k) <
Real(0.0)) {
568 tmp0 += sigma*
Real(-1.0);
569 tmp1 += sigma*
x(i,j-1,k);
571 tmp0 += sigma*
Real(-1.0) / hm;
574 gamma += tmp0 * (by *
Real(2.0) / (hp+hm));
575 rho += tmp1 * (by *
Real(2.0) / (hp+hm));
578 sigma = (sig(i-1,j-1,k ) * vfrc(i-1,j-1,k ) +
579 sig(i ,j-1,k ) * vfrc(i ,j-1,k ) +
580 sig(i-1,j ,k ) * vfrc(i-1,j ,k ) +
581 sig(i ,j ,k ) * vfrc(i ,j ,k ))
582 / ( vfrc(i-1,j-1,k ) +
587 if (levset(i,j,k+1) <
Real(0.0)) {
588 tmp0 = sigma*
Real(-1.0);
589 tmp1 = sigma*
x(i,j,k+1);
591 tmp0 = sigma*
Real(-1.0) / hp;
595 sigma = (sig(i-1,j-1,k-1) * vfrc(i-1,j-1,k-1) +
596 sig(i ,j-1,k-1) * vfrc(i ,j-1,k-1) +
597 sig(i-1,j ,k-1) * vfrc(i-1,j ,k-1) +
598 sig(i ,j ,k-1) * vfrc(i ,j ,k-1))
599 / ( vfrc(i-1,j-1,k-1) +
604 if (levset(i,j,k-1) <
Real(0.0)) {
605 tmp0 += sigma*
Real(-1.0);
606 tmp1 += sigma*
x(i,j,k-1);
608 tmp0 += sigma*
Real(-1.0) / hm;
611 gamma += tmp0 * (bz *
Real(2.0) / (hp+hm));
612 rho += tmp1 * (bz *
Real(2.0) / (hp+hm));
615 Real Ax = rho + gamma*
x(i,j,k);
617 x(i,j,k) += (rhs(i,j,k) - Ax*
scale) * (omega / (gamma*
scale));
#define AMREX_FORCE_INLINE
Definition AMReX_Extension.H:119
#define AMREX_GPU_HOST_DEVICE
Definition AMReX_GpuQualifiers.H:20
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:79
Definition AMReX_Amr.cpp:49
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlebndfdlap_sig_adotx(int, int, int, Array4< Real > const &, Array4< Real const > const &, Array4< int const > const &, Array4< Real const > const &, Real) noexcept
Definition AMReX_MLEBNodeFDLap_1D_K.H:21
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlebndfdlap_gsrb(int, int, int, Array4< Real > const &, Array4< Real const > const &, Array4< int const > const &, Real, int) noexcept
Definition AMReX_MLEBNodeFDLap_1D_K.H:14
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlebndfdlap_gsrb_eb(int i, int j, int k, Array4< Real > const &x, Array4< Real const > const &rhs, Array4< Real const > const &levset, Array4< int const > const &dmsk, Array4< Real const > const &ecx, Array4< Real const > const &ecy, Real bx, Real by, int redblack) noexcept
Definition AMReX_MLEBNodeFDLap_2D_K.H:113
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlebndfdlap_sig_adotx_eb_doit(int i, int j, int k, Array4< Real > const &y, Array4< Real const > const &x, Array4< Real const > const &levset, Array4< int const > const &dmsk, Array4< Real const > const &ecx, Array4< Real const > const &ecy, Array4< Real const > const &sig, Array4< Real const > const &vfrc, F const &xeb, Real bx, Real by) noexcept
Definition AMReX_MLEBNodeFDLap_2D_K.H:472
__host__ __device__ constexpr const T & min(const T &a, const T &b) noexcept
Definition AMReX_Algorithm.H:21
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlebndfdlap_sig_gsrb(int, int, int, Array4< Real > const &, Array4< Real const > const &, Array4< int const > const &, Array4< Real const > const &, Real, int) noexcept
Definition AMReX_MLEBNodeFDLap_1D_K.H:28
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlebndfdlap_sig_adotx_eb(int i, int j, int k, Array4< Real > const &y, Array4< Real const > const &x, Array4< Real const > const &levset, Array4< int const > const &dmsk, Array4< Real const > const &ecx, Array4< Real const > const &ecy, Array4< Real const > const &sig, Array4< Real const > const &vfrc, Real xeb, Real bx, Real by) noexcept
Definition AMReX_MLEBNodeFDLap_2D_K.H:532
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlebndfdlap_adotx(int, int, int, Array4< Real > const &, Array4< Real const > const &, Array4< int const > const &, Real) noexcept
Definition AMReX_MLEBNodeFDLap_1D_K.H:7
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlebndfdlap_adotx_eb_doit(int i, int j, int k, Array4< Real > const &y, Array4< Real const > const &x, Array4< Real const > const &levset, Array4< int const > const &dmsk, Array4< Real const > const &ecx, Array4< Real const > const &ecy, F const &xeb, Real bx, Real by) noexcept
Definition AMReX_MLEBNodeFDLap_2D_K.H:23
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlebndfdlap_scale_rhs(int i, int j, int, Array4< Real > const &rhs, Array4< int const > const &dmsk, Array4< Real const > const &ecx, Array4< Real const > const &ecy) noexcept
Definition AMReX_MLEBNodeFDLap_2D_K.H:7
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlebndfdlap_adotx_eb(int i, int j, int k, Array4< Real > const &y, Array4< Real const > const &x, Array4< Real const > const &levset, Array4< int const > const &dmsk, Array4< Real const > const &ecx, Array4< Real const > const &ecy, Real xeb, Real bx, Real by) noexcept
Definition AMReX_MLEBNodeFDLap_2D_K.H:74
__host__ __device__ IntVectND< dim > scale(const IntVectND< dim > &p, int s) noexcept
Returns a IntVectND obtained by multiplying each of the components of this IntVectND by s.
Definition AMReX_IntVect.H:1016
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlebndfdlap_sig_gsrb_eb(int i, int j, int k, Array4< Real > const &x, Array4< Real const > const &rhs, Array4< Real const > const &levset, Array4< int const > const &dmsk, Array4< Real const > const &ecx, Array4< Real const > const &ecy, Array4< Real const > const &sig, Array4< Real const > const &vfrc, Real bx, Real by, int redblack) noexcept
Definition AMReX_MLEBNodeFDLap_2D_K.H:559
Definition AMReX_Array4.H:61