10#ifndef PECLET_FLOW_MAC_PRESSURE_HPP
11#define PECLET_FLOW_MAC_PRESSURE_HPP
13#include <Kokkos_Core.hpp>
32template <
class OpV,
class OV>
34 const OpV& AS,
const OpV& AN,
const OpV& AB,
35 const OpV& AT,
const OV& ox,
const OV& oy,
36 const OV& oz,
long i,
long sx,
long sy,
long sz,
39 const double ts = oy(i) *
gfy,
tn = oy(i + sy) *
gfy;
40 const double tb = oz(i) *
gfz,
tt = oz(i + sz) *
gfz;
51template <
class PV,
class BV,
class OpV>
53 const OpV& AW,
const OpV& AE,
const OpV& AS,
54 const OpV& AN,
const OpV& AB,
const OpV& AT,
long i,
55 long xp,
long xm,
long yp,
long ym,
long zp,
57 const double ac =
AC(i);
60 const double s = AE(i) * phi(xp) + AW(i) * phi(xm) + AN(i) * phi(yp) + AS(i) * phi(ym) +
61 AT(i) * phi(zp) + AB(i) * phi(zm);
62 phi(i) = (b(i) - s) /
ac;
65template <
class XV,
class OpV>
67 const OpV& AE,
const OpV& AS,
const OpV& AN,
68 const OpV& AB,
const OpV& AT,
long i,
long xp,
69 long xm,
long yp,
long ym,
long zp,
long zm) {
70 return AC(i) * x(i) + AE(i) * x(xp) + AW(i) * x(xm) + AN(i) * x(yp) + AS(i) * x(ym) +
71 AT(i) * x(zp) + AB(i) * x(zm);
74template <
class XV,
class OV>
76 const OV& oz,
long i,
long sx,
long sy,
long sz,
77 long xp,
long xm,
long yp,
long ym,
long zp,
78 long zm,
double gfx,
double gfy,
double gfz) {
79 const double xi = x(i);
80 return ox(i) *
gfx * (
xi - x(xm)) + ox(i +
sx) *
gfx * (
xi - x(xp)) + oy(i) *
gfy * (
xi - x(ym)) +
81 oy(i + sy) *
gfy * (
xi - x(yp)) + oz(i) *
gfz * (
xi - x(zm)) +
82 oz(i + sz) *
gfz * (
xi - x(zp));
90 "peclet::flow::cc_build_op",
C3{g, g, g},
C3{e.x - g, e.y - g, e.z - g},
92 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
94 cutcellBuildOpCell(
AC, AW, AE, AS, AN, AB, AT, ox, oy, oz, i,
sx, sy, sz,
gfx,
gfy,
gfz);
118template <
class OpV,
class OV>
120 const OpV& AFZ,
const OV& ox,
const OV& oy,
121 const OV& oz,
long i,
long sx,
long sy,
long sz,
122 double gfx,
double gfy,
double gfz,
bool diag) {
123 const double tw = ox(i) *
gfx;
124 const double ts = oy(i) *
gfy;
125 const double tb = oz(i) *
gfz;
130 const double te = ox(i +
sx) *
gfx;
131 const double tn = oy(i + sy) *
gfy;
132 const double tt = oz(i + sz) *
gfz;
136template <
class PV,
class BV,
class OpV>
138 const OpV& AFX,
const OpV& AFY,
const OpV& AFZ,
139 long i,
long sx,
long sy,
long sz,
long xp,
140 long xm,
long yp,
long ym,
long zp,
long zm) {
141 const double ac =
AC(i);
144 const double s = AFX(i +
sx) * phi(xp) + AFX(i) * phi(xm) + AFY(i + sy) * phi(yp) +
145 AFY(i) * phi(ym) + AFZ(i + sz) * phi(zp) + AFZ(i) * phi(zm);
146 phi(i) = (b(i) - s) /
ac;
148template <
class XV,
class OpV>
150 const OpV& AFY,
const OpV& AFZ,
long i,
long sx,
151 long sy,
long sz,
long xp,
long xm,
long yp,
152 long ym,
long zp,
long zm) {
153 return AC(i) * x(i) + AFX(i +
sx) * x(xp) + AFX(i) * x(xm) + AFY(i + sy) * x(yp) +
154 AFY(i) * x(ym) + AFZ(i + sz) * x(zp) + AFZ(i) * x(zm);
156template <
class RV,
class XV,
class BV,
class OpV>
159 const OpV& AFZ,
long i,
long sx,
long sy,
160 long sz,
long xp,
long xm,
long yp,
long ym,
174 "peclet::flow::cc_build_op",
C3{0, 0, 0},
C3{e.x, e.y, e.z},
176 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
180 cutcellBuildFaceOpCell(
AC, AFX, AFY, AFZ, ox, oy, oz, i,
sx, sy, sz,
gfx,
gfy,
gfz, diag);
188 if constexpr (std::is_same_v<typename CCExec::memory_space, Kokkos::HostSpace>) {
189 const int nyi = e.y - 2 * g,
nzi = e.z - 2 * g;
190 const long cells = (
long)
nyi *
nzi * (e.x - 2 * g);
192 const int ly = g + (int)(t %
nyi),
lz = g + (int)(t /
nyi);
193 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
194 const int P = (
color + og.x + og.y +
ly + og.z +
lz) & 1;
196 for (
int lx = g + ((P ^ (g & 1)) & 1);
lx < e.x - g;
lx += 2) {
198 cutcellSmoothFaceCell(phi, b,
AC, AFX, AFY, AFZ, i,
sx, sy, sz, i +
sx, i -
sx, i + sy,
199 i - sy, i + sz, i - sz);
207 Kokkos::parallel_for(
"peclet::flow::cc_smooth",
212 Kokkos::parallel_for(
213 "peclet::flow::cc_smooth",
MD(
space, {g, g, g}, {e.x - g, e.y - g, e.z - g}),
215 if (((og.x +
lx + og.y +
ly + og.z +
lz) & 1) !=
color)
217 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
219 cutcellSmoothFaceCell(phi, b,
AC, AFX, AFY, AFZ, i,
sx, sy, sz, i +
sx, i -
sx, i + sy,
220 i - sy, i + sz, i - sz);
229 if constexpr (std::is_same_v<typename CCExec::memory_space, Kokkos::HostSpace>) {
235 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
236 const int P = (
color + og.x + og.y +
ly + og.z +
lz) & 1;
241 cutcellSmoothFaceCell(phi, b,
AC, AFX, AFY, AFZ, i,
sx, sy, sz, i +
sx, i -
sx, i + sy,
242 i - sy, i + sz, i - sz);
250 Kokkos::parallel_for(
"peclet::flow::cc_smooth_box",
255 Kokkos::parallel_for(
260 if (((og.x +
lx + og.y +
ly + og.z +
lz) & 1) !=
color)
262 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
264 cutcellSmoothFaceCell(phi, b,
AC, AFX, AFY, AFZ, i,
sx, sy, sz, i +
sx, i -
sx, i + sy,
265 i - sy, i + sz, i - sz);
273 "peclet::flow::cc_apply",
C3{g, g, g},
C3{e.x - g, e.y - g, e.z - g},
275 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
277 y(i) =
cutcellApplyFaceCell(x,
AC, AFX, AFY, AFZ, i,
sx, sy, sz, i +
sx, i -
sx, i + sy,
278 i - sy, i + sz, i - sz);
291 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
293 y(i) =
cutcellApplyFaceCell(x,
AC, AFX, AFY, AFZ, i,
sx, sy, sz, i +
sx, i -
sx, i + sy,
294 i - sy, i + sz, i - sz);
303 "peclet::flow::diverg_open",
C3{g, g, g},
C3{e.x - g, e.y - g, e.z - g},
305 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
306 const long i = (
long)x + (
long)y * sy + (
long)z * sz;
307 d(i) = (ox(i +
sx) * u(i +
sx) - ox(i) * u(i)) + (oy(i + sy) * v(i + sy) - oy(i) * v(i)) +
308 (oz(i + sz) * w(i + sz) - oz(i) * w(i));
321 if constexpr (std::is_same_v<typename CCExec::memory_space, Kokkos::HostSpace>) {
322 const int nyi = e.y - 2 * g,
nzi = e.z - 2 * g;
323 const long cells = (
long)
nyi *
nzi * (e.x - 2 * g);
325 const int ly = g + (int)(t %
nyi),
lz = g + (int)(t /
nyi);
326 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
327 const int P = (
color + og.x + og.y +
ly + og.z +
lz) & 1;
329 for (
int lx = g + ((P ^ (g & 1)) & 1);
lx < e.x - g;
lx += 2) {
331 cutcellSmoothCell(phi, b,
AC, AW, AE, AS, AN, AB, AT, i, i +
sx, i -
sx, i + sy, i - sy,
340 Kokkos::parallel_for(
"peclet::flow::cc_smooth",
345 Kokkos::parallel_for(
346 "peclet::flow::cc_smooth",
MD(
space, {g, g, g}, {e.x - g, e.y - g, e.z - g}),
348 if (((og.x +
lx + og.y +
ly + og.z +
lz) & 1) !=
color)
350 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
352 cutcellSmoothCell(phi, b,
AC, AW, AE, AS, AN, AB, AT, i, i +
sx, i -
sx, i + sy, i - sy,
370 if constexpr (std::is_same_v<typename CCExec::memory_space, Kokkos::HostSpace>) {
378 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
379 const int P = (
color + og.x + og.y +
ly + og.z +
lz) & 1;
384 cutcellSmoothCell(phi, b,
AC, AW, AE, AS, AN, AB, AT, i, i +
sx, i -
sx, i + sy, i - sy,
393 Kokkos::parallel_for(
"peclet::flow::cc_smooth_box",
398 Kokkos::parallel_for(
403 if (((og.x +
lx + og.y +
ly + og.z +
lz) & 1) !=
color)
405 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
407 cutcellSmoothCell(phi, b,
AC, AW, AE, AS, AN, AB, AT, i, i +
sx, i -
sx, i + sy, i - sy,
415 OpV AT,
C3 e,
int g) {
417 "peclet::flow::cc_apply",
C3{g, g, g},
C3{e.x - g, e.y - g, e.z - g},
419 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
421 y(i) =
cutcellApplyCell(x,
AC, AW, AE, AS, AN, AB, AT, i, i +
sx, i -
sx, i + sy, i - sy,
439 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
441 y(i) =
cutcellApplyCell(x,
AC, AW, AE, AS, AN, AB, AT, i, i +
sx, i -
sx, i + sy, i - sy,
470 int g,
double gfx,
double gfy,
double gfz) {
472 "peclet::flow::cc_apply_exact",
C3{g, g, g},
C3{e.x - g, e.y - g, e.z - g},
474 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
476 y(i) =
cutcellApplyExactCell(x, ox, oy, oz, i,
sx, sy, sz, i +
sx, i -
sx, i + sy, i - sy,
495 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
497 y(i) =
cutcellApplyExactCell(x, ox, oy, oz, i,
sx, sy, sz, i +
sx, i -
sx, i + sy, i - sy,
513 double wx = 1.0,
double wy = 1.0,
double wz = 1.0) {
515 "peclet::flow::correct",
C3{g, g, g},
C3{e.x - g, e.y - g, e.z - g},
517 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
518 const long i = (
long)x + (
long)y * sy + (
long)z * sz;
519 u(i) -=
wx * (phi(i) - phi(i -
sx));
520 v(i) -=
wy * (phi(i) - phi(i - sy));
521 w(i) -=
wz * (phi(i) - phi(i - sz));
530 double rho0,
C3 e,
int g,
double wx = 1.0,
double wy = 1.0,
533 "peclet::flow::correct_var",
C3{g, g, g},
C3{e.x - g, e.y - g, e.z - g},
535 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
536 const long i = (
long)x + (
long)y * sy + (
long)z * sz;
537 u(i) -=
wx * (
rho0 / (0.5 * (rho(i) + rho(i -
sx))) * (phi(i) - phi(i -
sx)));
538 v(i) -=
wy * (
rho0 / (0.5 * (rho(i) + rho(i - sy))) * (phi(i) - phi(i - sy)));
539 w(i) -=
wz * (
rho0 / (0.5 * (rho(i) + rho(i - sz))) * (phi(i) - phi(i - sz)));
551 "peclet::flow::rho_coeff",
C3{g, g, g},
C3{e.x - g, e.y - g, e.z - g},
553 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
554 const long i = (
long)x + (
long)y * sy + (
long)z * sz;
555 cx(i) = ox(i) *
rho0 / (0.5 * (rho(i) + rho(i -
sx)));
556 cy(i) = oy(i) *
rho0 / (0.5 * (rho(i) + rho(i - sy)));
557 cz(i) = oz(i) *
rho0 / (0.5 * (rho(i) + rho(i - sz)));
593 "peclet::flow::rho_coeff_harm",
C3{g, g, g},
C3{e.x - g, e.y - g, e.z - g},
595 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
596 const long i = (
long)x + (
long)y * sy + (
long)z * sz;
598 cx(i) = ox(i) *
rho0 * (rho(i) + rho(i -
sx)) / (2.0 * rho(i) * rho(i -
sx));
599 cy(i) = oy(i) *
rho0 * (rho(i) + rho(i - sy)) / (2.0 * rho(i) * rho(i - sy));
600 cz(i) = oz(i) *
rho0 * (rho(i) + rho(i - sz)) / (2.0 * rho(i) * rho(i - sz));
622 int a,
bool harmonic) {
624 int dims[3] = {e.x, e.y, e.z};
625 long st[3] = {1, (
long)e.x, (
long)e.x * e.y};
626 const int b = (a + 1) % 3, c = (a + 2) % 3;
627 const long sa = st[a],
sb = st[b], sc = st[c];
628 const int bf =
dims[a] - g;
630 Kokkos::parallel_for(
631 "peclet::flow::rho_coeff_outflow",
MD(
space, {0, 0}, {
dims[b],
dims[c]}),
634 const double ra = rho(i), rb = rho(i -
sa);
635 const double rf = harmonic ? (2.0 *
ra * rb / (
ra + rb)) : (0.5 * (
ra + rb));
640 ca(i) =
oa(i) *
rho0 / rf;
645 double rho0,
C3 e,
int g,
double wx = 1.0,
double wy = 1.0,
648 "peclet::flow::correct_var_harm",
C3{g, g, g},
C3{e.x - g, e.y - g, e.z - g},
650 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
651 const long i = (
long)x + (
long)y * sy + (
long)z * sz;
652 u(i) -=
wx * (
rho0 * (rho(i) + rho(i -
sx)) / (2.0 * rho(i) * rho(i -
sx)) *
653 (phi(i) - phi(i -
sx)));
654 v(i) -=
wy * (
rho0 * (rho(i) + rho(i - sy)) / (2.0 * rho(i) * rho(i - sy)) *
655 (phi(i) - phi(i - sy)));
656 w(i) -=
wz * (
rho0 * (rho(i) + rho(i - sz)) / (2.0 * rho(i) * rho(i - sz)) *
657 (phi(i) - phi(i - sz)));
671 "peclet::flow::diverg_open_eps",
C3{g, g, g},
C3{e.x - g, e.y - g, e.z - g},
673 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
674 const long i = (
long)x + (
long)y * sy + (
long)z * sz;
675 const double exp = 0.5 * (eps(i) + eps(i +
sx)),
exm = 0.5 * (eps(i) + eps(i -
sx));
676 const double eyp = 0.5 * (eps(i) + eps(i + sy)),
eym = 0.5 * (eps(i) + eps(i - sy));
677 const double ezp = 0.5 * (eps(i) + eps(i + sz)),
ezm = 0.5 * (eps(i) + eps(i - sz));
678 d(i) = (ox(i +
sx) *
exp * u(i +
sx) - ox(i) *
exm * u(i)) +
679 (oy(i + sy) *
eyp * v(i + sy) - oy(i) *
eym * v(i)) +
680 (oz(i + sz) *
ezp * w(i + sz) - oz(i) *
ezm * w(i));
696 "peclet::flow::porous_coeff",
C3{g, g, g},
C3{e.x - g + 1, e.y - g + 1, e.z - g + 1},
698 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
699 const long i = (
long)x + (
long)y * sy + (
long)z * sz;
700 cx(i) = ox(i) * 0.5 * (eps(i) + eps(i -
sx));
701 cy(i) = oy(i) * 0.5 * (eps(i) + eps(i - sy));
702 cz(i) = oz(i) * 0.5 * (eps(i) + eps(i - sz));
716 "peclet::flow::porous_coeff_drag",
C3{g, g, g},
C3{e.x - g + 1, e.y - g + 1, e.z - g + 1},
718 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
719 const long i = (
long)x + (
long)y * sy + (
long)z * sz;
720 cx(i) = ox(i) * 0.5 * (eps(i) + eps(i -
sx)) * idt / (idt + 0.5 * (beta(i) + beta(i -
sx)));
721 cy(i) = oy(i) * 0.5 * (eps(i) + eps(i - sy)) * idt / (idt + 0.5 * (beta(i) + beta(i - sy)));
722 cz(i) = oz(i) * 0.5 * (eps(i) + eps(i - sz)) * idt / (idt + 0.5 * (beta(i) + beta(i - sz)));
739 "peclet::flow::porous_coeff_cons",
C3{g, g, g},
C3{e.x - g + 1, e.y - g + 1, e.z - g + 1},
741 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
742 const long i = (
long)x + (
long)y * sy + (
long)z * sz;
743 auto cf = [&](
long s,
CCConst o) {
744 const double epsF = 0.5 * (eps(i) + eps(i - s));
745 const double bF =
useBeta ? 0.5 * (beta(i) + beta(i - s)) : 0.0;
756 double wx = 1.0,
double wy = 1.0,
double wz = 1.0) {
758 "peclet::flow::correct_porous_cons",
C3{g, g, g},
C3{e.x - g, e.y - g, e.z - g},
760 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
761 const long i = (
long)x + (
long)y * sy + (
long)z * sz;
762 auto wf = [&](
long s) {
763 const double epsF = 0.5 * (eps(i) + eps(i - s));
764 const double bF =
useBeta ? 0.5 * (beta(i) + beta(i - s)) : 0.0;
767 u(i) -=
wx * (
wf(
sx) * (phi(i) - phi(i -
sx)));
768 v(i) -=
wy * (
wf(sy) * (phi(i) - phi(i - sy)));
769 w(i) -=
wz * (
wf(sz) * (phi(i) - phi(i - sz)));
776 double idt,
C3 e,
int g,
double wx = 1.0,
double wy = 1.0,
779 "peclet::flow::correct_porous_drag",
C3{g, g, g},
C3{e.x - g, e.y - g, e.z - g},
781 const long sx = 1, sy = e.x, sz = (
long)e.x * e.y;
782 const long i = (
long)x + (
long)y * sy + (
long)z * sz;
783 u(i) -=
wx * (idt / (idt + 0.5 * (beta(i) + beta(i -
sx))) * (phi(i) - phi(i -
sx)));
784 v(i) -=
wy * (idt / (idt + 0.5 * (beta(i) + beta(i - sy))) * (phi(i) - phi(i - sy)));
785 w(i) -=
wz * (idt / (idt + 0.5 * (beta(i) + beta(i - sz))) * (phi(i) - phi(i - sz)));
flow — portable (Kokkos) cut-cell pressure-operator face openness from an SDF.
#define PECLET_FLOW_OMP_SIMD
double cutcellApplyExactCell(const XV &x, const OV &ox, const OV &oy, const OV &oz, long i, long sx, long sy, long sz, long xp, long xm, long yp, long ym, long zp, long zm, double gfx, double gfy, double gfz)
void buildRhoCoeffOutflowFace(CCField ca, CCConst oa, CCConst rho, double rho0, C3 e, int g, int a, bool harmonic)
void buildPorousCoeffDrag(CCField cx, CCField cy, CCField cz, CCConst ox, CCConst oy, CCConst oz, CCConst eps, CCConst beta, double idt, C3 e, int g)
void applyCutcellOpFace(CCField y, CCConst x, OpV AC, OpV AFX, OpV AFY, OpV AFZ, C3 e, int g)
void cutcellBuildFaceOpCell(const OpV &AC, const OpV &AFX, const OpV &AFY, const OpV &AFZ, const OV &ox, const OV &oy, const OV &oz, long i, long sx, long sy, long sz, double gfx, double gfy, double gfz, bool diag)
void projectCorrectPorousDrag(CCField u, CCField v, CCField w, CCConst phi, CCConst beta, double idt, C3 e, int g, double wx=1.0, double wy=1.0, double wz=1.0)
void buildRhoCoeff(CCField cx, CCField cy, CCField cz, CCConst ox, CCConst oy, CCConst oz, CCConst rho, double rho0, C3 e, int g)
void cutcellResidualFaceCell(const RV &r, const XV &x, const BV &b, const OpV &AC, const OpV &AFX, const OpV &AFY, const OpV &AFZ, long i, long sx, long sy, long sz, long xp, long xm, long yp, long ym, long zp, long zm)
void buildPorousCoeffCons(CCField cx, CCField cy, CCField cz, CCConst ox, CCConst oy, CCConst oz, CCConst eps, CCConst beta, bool useBeta, double rhoidt, C3 e, int g)
void cutcellSmoothFaceCell(const PV &phi, const BV &b, const OpV &AC, const OpV &AFX, const OpV &AFY, const OpV &AFZ, long i, long sx, long sy, long sz, long xp, long xm, long yp, long ym, long zp, long zm)
void divergOpen(CCConst u, CCConst v, CCConst w, CCConst ox, CCConst oy, CCConst oz, CCField d, C3 e, int g)
void projectCorrect(CCField u, CCField v, CCField w, CCConst phi, C3 e, int g, double wx=1.0, double wy=1.0, double wz=1.0)
void cutcellSmoothColorBox(CCField phi, CCConst b, OpV AC, OpV AW, OpV AE, OpV AS, OpV AN, OpV AB, OpV AT, C3 e, C3 og, int color, C3 rlo, C3 rhi, C3 slo, C3 shi)
void applyCutcellOpExact(CCField y, CCConst x, CCConst ox, CCConst oy, CCConst oz, C3 e, int g, double gfx, double gfy, double gfz)
void applyCutcellOp(CCField y, CCConst x, OpV AC, OpV AW, OpV AE, OpV AS, OpV AN, OpV AB, OpV AT, C3 e, int g)
void projectCorrectPorousCons(CCField u, CCField v, CCField w, CCConst phi, CCConst eps, CCConst beta, bool useBeta, double rhoidt, C3 e, int g, double wx=1.0, double wy=1.0, double wz=1.0)
void cutcellSmoothColorBoxFace(CCField phi, CCConst b, OpV AC, OpV AFX, OpV AFY, OpV AFZ, C3 e, C3 og, int color, C3 rlo, C3 rhi, C3 slo, C3 shi)
void buildCutcellOpFace(OpV AC, OpV AFX, OpV AFY, OpV AFZ, CCConst ox, CCConst oy, CCConst oz, C3 e, int gb, double gfx, double gfy, double gfz)
void cutcellBuildOpCell(const OpV &AC, const OpV &AW, const OpV &AE, const OpV &AS, const OpV &AN, const OpV &AB, const OpV &AT, const OV &ox, const OV &oy, const OV &oz, long i, long sx, long sy, long sz, double gfx, double gfy, double gfz)
void cutcellSmoothCell(const PV &phi, const BV &b, const OpV &AC, const OpV &AW, const OpV &AE, const OpV &AS, const OpV &AN, const OpV &AB, const OpV &AT, long i, long xp, long xm, long yp, long ym, long zp, long zm)
double cutcellApplyCell(const XV &x, const OpV &AC, const OpV &AW, const OpV &AE, const OpV &AS, const OpV &AN, const OpV &AB, const OpV &AT, long i, long xp, long xm, long yp, long ym, long zp, long zm)
void cutcellSmoothColorFace(CCField phi, CCConst b, OpV AC, OpV AFX, OpV AFY, OpV AFZ, C3 e, C3 og, int g, int color)
void applyCutcellOpBoxFace(CCField y, CCConst x, OpV AC, OpV AFX, OpV AFY, OpV AFZ, C3 e, C3 rlo, C3 rhi, C3 slo, C3 shi)
void projectCorrectVar(CCField u, CCField v, CCField w, CCConst phi, CCConst rho, double rho0, C3 e, int g, double wx=1.0, double wy=1.0, double wz=1.0)
void ccFor3(const char *name, C3 lo, C3 hi, F f)
void buildCutcellOp(OpV AC, OpV AW, OpV AE, OpV AS, OpV AN, OpV AB, OpV AT, CCConst ox, CCConst oy, CCConst oz, C3 e, int g, double gfx, double gfy, double gfz)
Kokkos::View< double *, CCMem > CCField
void cutcellSmoothColor(CCField phi, CCConst b, OpV AC, OpV AW, OpV AE, OpV AS, OpV AN, OpV AB, OpV AT, C3 e, C3 og, int g, int color)
void buildPorousCoeff(CCField cx, CCField cy, CCField cz, CCConst ox, CCConst oy, CCConst oz, CCConst eps, C3 e, int g)
Kokkos::DefaultExecutionSpace CCExec
void buildRhoCoeffHarm(CCField cx, CCField cy, CCField cz, CCConst ox, CCConst oy, CCConst oz, CCConst rho, double rho0, C3 e, int g)
void divergOpenEps(CCConst u, CCConst v, CCConst w, CCConst ox, CCConst oy, CCConst oz, CCConst eps, CCField d, C3 e, int g)
void projectCorrectVarHarm(CCField u, CCField v, CCField w, CCConst phi, CCConst rho, double rho0, C3 e, int g, double wx=1.0, double wy=1.0, double wz=1.0)
void applyCutcellOpExactBox(CCField y, CCConst x, CCConst ox, CCConst oy, CCConst oz, C3 e, C3 rlo, C3 rhi, C3 slo, C3 shi, double gfx, double gfy, double gfz)
bool hostRunSerial(long cells)
double cutcellApplyFaceCell(const XV &x, const OpV &AC, const OpV &AFX, const OpV &AFY, const OpV &AFZ, long i, long sx, long sy, long sz, long xp, long xm, long yp, long ym, long zp, long zm)
void applyCutcellOpBox(CCField y, CCConst x, OpV AC, OpV AW, OpV AE, OpV AS, OpV AN, OpV AB, OpV AT, C3 e, C3 rlo, C3 rhi, C3 slo, C3 shi)
Kokkos::View< const double *, CCMem > CCConst
flow — the multidimensional iteration policies: iteration order follows storage.
static constexpr double AC
Kokkos::View< double *, peclet::flow::CCMem > OpV