1#ifndef AMREX_MLEBNODEFDLAP_2D_K_H_
2#define AMREX_MLEBNODEFDLAP_2D_K_H_
36 if (levset(i+1,j,k) <
Real(0.0)) {
37 tmp =
x(i+1,j,k) -
x(i,j,k);
39 tmp = (xeb(i+1,j,k) -
x(i,j,k)) / hp;
43 if (levset(i-1,j,k) <
Real(0.0)) {
44 tmp +=
x(i-1,j,k) -
x(i,j,k);
46 tmp += (xeb(i-1,j,k) -
x(i,j,k)) / hm;
49 out = tmp * bx *
Real(2.0) / (hp+hm);
53 if (levset(i,j+1,k) <
Real(0.0)) {
54 tmp =
x(i,j+1,k) -
x(i,j,k);
56 tmp = (xeb(i,j+1,k) -
x(i,j,k)) / hp;
60 if (levset(i,j-1,k) <
Real(0.0)) {
61 tmp +=
x(i,j-1,k) -
x(i,j,k);
63 tmp += (xeb(i,j-1,k) -
x(i,j,k)) / hm;
66 out += tmp * by *
Real(2.0) / (hp+hm);
81 [=] (
int,
int,
int) ->
Real {
return xeb; },
93 [=] (
int i1,
int i2,
int i3) ->
Real {
94 return xeb(i1,i2,i3); },
104 y(i,j,k) =
Real(0.0);
106 y(i,j,k) = bx * (
x(i-1,j,k) +
x(i+1,j,k))
107 + by * (
x(i,j-1,k) +
x(i,j+1,k))
108 - (
Real(2.0)*(bx+by)) *
x(i,j,k);
117 Real bx,
Real by,
int redblack)
noexcept
119 if ((i+j+k+redblack)%2 == 0) {
127 if (levset(i+1,j,k) <
Real(0.0)) {
131 tmp0 =
Real(-1.0) / hp;
136 if (levset(i-1,j,k) <
Real(0.0)) {
140 tmp0 +=
Real(-1.0) / hm;
143 Real gamma = tmp0 * (bx *
Real(2.0) / (hp+hm));
144 Real rho = tmp1 * (bx *
Real(2.0) / (hp+hm));
148 if (levset(i,j+1,k) <
Real(0.0)) {
152 tmp0 =
Real(-1.0) / hp;
157 if (levset(i,j-1,k) <
Real(0.0)) {
161 tmp0 +=
Real(-1.0) / hm;
164 gamma += tmp0 * (by *
Real(2.0) / (hp+hm));
165 rho += tmp1 * (by *
Real(2.0) / (hp+hm));
168 Real Ax = rho + gamma*
x(i,j,k);
170 x(i,j,k) += (rhs(i,j,k) - Ax*
scale) * (omega / (gamma*
scale));
178 Real bx,
Real by,
int redblack)
noexcept
180 if ((i+j+k+redblack)%2 == 0) {
185 Real Ax = bx * (
x(i-1,j,k) +
x(i+1,j,k))
186 + by * (
x(i,j-1,k) +
x(i,j+1,k))
189 x(i,j,k) += (rhs(i,j,k) - Ax) * (omega / gamma);
205 if (dmsk(i,j,k) || (r ==
Real(0.0) && alpha !=
Real(0.0))) {
206 y(i,j,k) =
Real(0.0);
211 if (r ==
Real(0.0)) {
212 if (levset(i+1,j,k) <
Real(0.0)) {
213 out =
Real(4.0) * sigr * (
x(i+1,j,k)-
x(i,j,k)) / (dr*dr);
217 out =
Real(4.0) * sigr * (xeb(i+1,j,k)-
x(i,j,k)) / (dr*dr*hp*hp);
222 if (levset(i+1,j,k) <
Real(0.0)) {
223 tmp = (
x(i+1,j,k) -
x(i,j,k)) * (r +
Real(0.5) * dr);
225 tmp = (xeb(i+1,j,k) -
x(i,j,k)) / hp * (r +
Real(0.5) * hp * dr);
229 if (levset(i-1,j,k) <
Real(0.0)) {
230 tmp += (
x(i-1,j,k) -
x(i,j,k)) * (r -
Real(0.5) * dr);
232 tmp += (xeb(i-1,j,k) -
x(i,j,k)) / hm * (r -
Real(0.5) * hm * dr);
235 out = tmp *
Real(2.0) * sigr / ((hp+hm) * r * dr * dr);
240 if (levset(i,j+1,k) <
Real(0.0)) {
241 tmp =
x(i,j+1,k) -
x(i,j,k);
243 tmp = (xeb(i,j+1,k) -
x(i,j,k)) / hp;
248 if (levset(i,j-1,k) <
Real(0.0)) {
249 tmp +=
x(i,j-1,k) -
x(i,j,k);
251 tmp += (xeb(i,j-1,k) -
x(i,j,k)) / hm;
254 out += tmp *
Real(2.0) / ((hp+hm) * dz * dz);
257 if (r !=
Real(0.0)) {
258 out -= alpha/(r*r) *
x(i,j,k);
273 [=] (
int,
int,
int) ->
Real {
return xeb; },
274 sigr, dr, dz, rlo, alpha);
286 [=] (
int i1,
int i2,
int i3) ->
Real {
287 return xeb(i1,i2,i3); },
288 sigr, dr, dz, rlo, alpha);
297 if (dmsk(i,j,k) || (r ==
Real(0.0) && alpha !=
Real(0.0))) {
298 y(i,j,k) =
Real(0.0);
300 Real Ax = (
x(i,j-1,k) -
Real(2.0)*
x(i,j,k) +
x(i,j+1,k)) / (dz*dz);
301 if (r ==
Real(0.0)) {
302 Ax +=
Real(4.0) * sigr * (
x(i+1,j,k)-
x(i,j,k)) / (dr*dr);
306 Ax += sigr * (rp*
x(i+1,j,k) - (rp+rm)*
x(i,j,k) + rm*
x(i-1,j,k)) / (r*dr*dr);
307 Ax -= alpha/(r*r) *
x(i,j,k);
320 if ((i+j+k+redblack)%2 == 0) {
322 if (dmsk(i,j,k) || (r ==
Real(0.0) && alpha !=
Real(0.0))) {
328 if (r ==
Real(0.0)) {
329 if (levset(i+1,j,k) <
Real(0.0)) {
330 Ax = (
Real(4.0) * sigr / (dr*dr)) * (
x(i+1,j,k)-
x(i,j,k));
331 gamma = -(
Real(4.0) * sigr / (dr*dr));
335 gamma = -(
Real(4.0) * sigr / (dr*dr*hp*hp));
336 Ax = gamma *
x(i,j,k);
341 if (levset(i+1,j,k) <
Real(0.0)) {
342 tmp = (
x(i+1,j,k) -
x(i,j,k)) * (r +
Real(0.5) * dr);
343 tmp0 = -(r +
Real(0.5) * dr);
345 tmp0 =
Real(-1.0) / hp * (r +
Real(0.5) * hp * dr);
346 tmp = tmp0 *
x(i,j,k);
350 if (levset(i-1,j,k) <
Real(0.0)) {
351 tmp += (
x(i-1,j,k) -
x(i,j,k)) * (r -
Real(0.5) * dr);
352 tmp0 += -(r -
Real(0.5) * dr);
354 tmp += -
x(i,j,k) / hm * (r -
Real(0.5) * hm * dr);
355 tmp0 +=
Real(-1.0) / hm * (r -
Real(0.5) * hm * dr);
358 Ax = tmp *
Real(2.0) * sigr / ((hp+hm) * r * dr * dr);
359 gamma = tmp0 *
Real(2.0) * sigr / ((hp+hm) * r * dr * dr);
364 if (levset(i,j+1,k) <
Real(0.0)) {
365 tmp =
x(i,j+1,k) -
x(i,j,k);
368 tmp0 =
Real(-1.0) / hp;
369 tmp = tmp0 *
x(i,j,k);
373 if (levset(i,j-1,k) <
Real(0.0)) {
374 tmp +=
x(i,j-1,k) -
x(i,j,k);
377 tmp += -
x(i,j,k) / hm;
378 tmp0 +=
Real(-1.0) / hm;
381 Ax += tmp *
Real(2.0) / ((hp+hm) * dz * dz);
382 gamma += tmp0 *
Real(2.0) / ((hp+hm) * dz * dz);
385 if (r !=
Real(0.0)) {
386 Ax -= alpha/(r*r) *
x(i,j,k);
387 gamma -= alpha/(r*r);
391 x(i,j,k) += (rhs(i,j,k) - Ax*
scale) * (omega / (gamma*
scale));
401 if ((i+j+k+redblack)%2 == 0) {
403 if (dmsk(i,j,k) || (r ==
Real(0.0) && alpha !=
Real(0.0))) {
406 Real Ax = (
x(i,j-1,k) -
Real(2.0)*
x(i,j,k) +
x(i,j+1,k)) / (dz*dz);
408 if (r ==
Real(0.0)) {
409 Ax += (
Real(4.0)*sigr/(dr*dr)) * (
x(i+1,j,k)-
x(i,j,k));
410 gamma += -(
Real(4.0)*sigr/(dr*dr));
414 Ax += sigr*(rp*
x(i+1,j,k) - (rp+rm)*
x(i,j,k) + rm*
x(i-1,j,k)) / (r*dr*dr);
415 gamma += -sigr*(rp+rm) / (r*dr*dr);
416 Ax -= alpha/(r*r) *
x(i,j,k);
417 gamma -= alpha/(r*r);
420 x(i,j,k) += (rhs(i,j,k) - Ax) * (omega / gamma);
433 y(i,j,k) =
Real(0.0);
435 Real sigxm =
Real(0.5)*(sig(i-1,j-1,k)+sig(i-1,j ,k));
436 Real sigxp =
Real(0.5)*(sig(i ,j-1,k)+sig(i ,j ,k));
437 Real sigym =
Real(0.5)*(sig(i-1,j-1,k)+sig(i ,j-1,k));
438 Real sigyp =
Real(0.5)*(sig(i-1,j ,k)+sig(i ,j ,k));
439 y(i,j,k) = bx * (sigxm*
x(i-1,j,k) + sigxp*
x(i+1,j,k))
440 + by * (sigym*
x(i,j-1,k) + sigyp*
x(i,j+1,k))
441 - (bx*(sigxm+sigxp) + by*(sigym+sigyp)) *
x(i,j,k);
450 Real bx,
Real by,
int redblack)
noexcept
452 if ((i+j+k+redblack)%2 == 0) {
456 Real sigxm =
Real(0.5)*(sig(i-1,j-1,k)+sig(i-1,j ,k));
457 Real sigxp =
Real(0.5)*(sig(i ,j-1,k)+sig(i ,j ,k));
458 Real sigym =
Real(0.5)*(sig(i-1,j-1,k)+sig(i ,j-1,k));
459 Real sigyp =
Real(0.5)*(sig(i-1,j ,k)+sig(i ,j ,k));
460 Real gamma = -(bx*(sigxm+sigxp) + by*(sigym+sigyp));
461 Real Ax = bx * (sigxm*
x(i-1,j,k) + sigxp*
x(i+1,j,k))
462 + by * (sigym*
x(i,j-1,k) + sigyp*
x(i,j+1,k))
465 x(i,j,k) += (rhs(i,j,k) - Ax) * (omega / gamma);
480 y(i,j,k) =
Real(0.0);
485 sigma = (sig(i,j-1,k)*vfrc(i,j-1,k) + sig(i,j,k)*vfrc(i,j,k))
486 / (vfrc(i,j-1,k) + vfrc(i,j,k));
488 if (levset(i+1,j,k) <
Real(0.0)) {
489 tmp = sigma*(
x(i+1,j,k) -
x(i,j,k));
491 tmp = sigma*((xeb(i+1,j,k) -
x(i,j,k)) / hp);
494 sigma = (sig(i-1,j-1,k)*vfrc(i-1,j-1,k) + sig(i-1,j,k)*vfrc(i-1,j,k))
495 / (vfrc(i-1,j-1,k) + vfrc(i-1,j,k));
497 if (levset(i-1,j,k) <
Real(0.0)) {
498 tmp += sigma*(
x(i-1,j,k) -
x(i,j,k));
500 tmp += sigma*((xeb(i-1,j,k) -
x(i,j,k)) / hm);
503 out = tmp * bx *
Real(2.0) / (hp+hm);
506 sigma = (sig(i-1,j,k)*vfrc(i-1,j,k) + sig(i,j,k)*vfrc(i,j,k))
507 / (vfrc(i-1,j,k) + vfrc(i,j,k));
509 if (levset(i,j+1,k) <
Real(0.0)) {
510 tmp = sigma*(
x(i,j+1,k) -
x(i,j,k));
512 tmp = sigma*((xeb(i,j+1,k) -
x(i,j,k)) / hp);
515 sigma = (sig(i-1,j-1,k)*vfrc(i-1,j-1,k) + sig(i,j-1,k)*vfrc(i,j-1,k))
516 / (vfrc(i-1,j-1,k) + vfrc(i,j-1,k));
518 if (levset(i,j-1,k) <
Real(0.0)) {
519 tmp += sigma*(
x(i,j-1,k) -
x(i,j,k));
521 tmp += sigma*((xeb(i,j-1,k) -
x(i,j,k)) / hm);
524 out += tmp * by *
Real(2.0) / (hp+hm);
539 mlebndfdlap_sig_adotx_eb_doit(i, j, k,
y,
x, levset, dmsk,
ecx,
ecy, sig, vfrc,
540 [=] (
int,
int,
int) ->
Real {
return xeb; },
552 mlebndfdlap_sig_adotx_eb_doit(i, j, k,
y,
x, levset, dmsk,
ecx,
ecy, sig, vfrc,
553 [=] (
int i1,
int i2,
int i3) ->
Real {
554 return xeb(i1,i2,i3); },
567 Real bx,
Real by,
int redblack)
noexcept
569 if ((i+j+k+redblack)%2 == 0) {
573 Real tmp0, tmp1, sigma;
576 sigma = (sig(i,j-1,k)*vfrc(i,j-1,k) + sig(i,j,k)*vfrc(i,j,k))
577 / (vfrc(i,j-1,k) + vfrc(i,j,k));
579 if (levset(i+1,j,k) <
Real(0.0)) {
580 tmp0 = sigma*
Real(-1.0);
581 tmp1 = sigma*
x(i+1,j,k);
583 tmp0 = sigma*
Real(-1.0) / hp;
587 sigma = (sig(i-1,j-1,k)*vfrc(i-1,j-1,k) + sig(i-1,j,k)*vfrc(i-1,j,k))
588 / (vfrc(i-1,j-1,k) + vfrc(i-1,j,k));
590 if (levset(i-1,j,k) <
Real(0.0)) {
591 tmp0 += sigma*
Real(-1.0);
592 tmp1 += sigma*
x(i-1,j,k);
594 tmp0 += sigma*
Real(-1.0) / hm;
597 Real gamma = tmp0 * (bx *
Real(2.0) / (hp+hm));
598 Real rho = tmp1 * (bx *
Real(2.0) / (hp+hm));
601 sigma = (sig(i-1,j,k)*vfrc(i-1,j,k) + sig(i,j,k)*vfrc(i,j,k))
602 / (vfrc(i-1,j,k) + vfrc(i,j,k));
604 if (levset(i,j+1,k) <
Real(0.0)) {
605 tmp0 = sigma*
Real(-1.0);
606 tmp1 = sigma*
x(i,j+1,k);
608 tmp0 = sigma*
Real(-1.0) / hp;
612 sigma = (sig(i-1,j-1,k)*vfrc(i-1,j-1,k) + sig(i,j-1,k)*vfrc(i,j-1,k))
613 / (vfrc(i-1,j-1,k) + vfrc(i,j-1,k));
615 if (levset(i,j-1,k) <
Real(0.0)) {
616 tmp0 += sigma*
Real(-1.0);
617 tmp1 += sigma*
x(i,j-1,k);
619 tmp0 += sigma*
Real(-1.0) / hm;
622 gamma += tmp0 * (by *
Real(2.0) / (hp+hm));
623 rho += tmp1 * (by *
Real(2.0) / (hp+hm));
626 Real Ax = rho + gamma*
x(i,j,k);
628 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_adotx_rz_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 sigr, Real dr, Real dz, Real rlo, Real alpha) noexcept
Definition AMReX_MLEBNodeFDLap_2D_K.H:266
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
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlebndfdlap_gsrb_rz(int i, int j, int k, Array4< Real > const &x, Array4< Real const > const &rhs, Array4< int const > const &dmsk, Real sigr, Real dr, Real dz, Real rlo, int redblack, Real alpha) noexcept
Definition AMReX_MLEBNodeFDLap_2D_K.H:397
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlebndfdlap_gsrb_rz_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 sigr, Real dr, Real dz, Real rlo, int redblack, Real alpha) noexcept
Definition AMReX_MLEBNodeFDLap_2D_K.H:314
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mlebndfdlap_adotx_rz(int i, int j, int k, Array4< Real > const &y, Array4< Real const > const &x, Array4< int const > const &dmsk, Real sigr, Real dr, Real dz, Real rlo, Real alpha) noexcept
Definition AMReX_MLEBNodeFDLap_2D_K.H:292
__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_rz_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 sigr, Real dr, Real dz, Real rlo, Real alpha) noexcept
Definition AMReX_MLEBNodeFDLap_2D_K.H:198
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