56 double D,
double idt,
C3 e,
int g) {
58 using MD = Kokkos::MDRangePolicy<CCExec, Kokkos::Rank<3>>;
60 "peclet::flow::scalar_build_diff", MD(space, {g, g, g}, {e.x - g, e.y - g, e.z - g}),
61 KOKKOS_LAMBDA(
int lx,
int ly,
int lz) {
62 const long sx = 1, sy = e.x, sz = (long)e.x * e.y;
63 const long i = (long)lx + (
long)ly * sy + (long)lz * sz;
64 const double tw = D * ox(i), te = D * ox(i + sx);
65 const double ts = D * oy(i), tn = D * oy(i + sy);
66 const double tb = D * oz(i), tt = D * oz(i + sz);
73 AC(i) = idt + te + tw + tn + ts + tt + tb;
83 using MD = Kokkos::MDRangePolicy<CCExec, Kokkos::Rank<3>>;
85 "peclet::flow::scalar_build_rhs", MD(space, {g, g, g}, {e.x - g, e.y - g, e.z - g}),
86 KOKKOS_LAMBDA(
int lx,
int ly,
int lz) {
87 const long sx = 1, sy = e.x, sz = (long)e.x * e.y;
88 const long i = (long)lx + (
long)ly * sy + (long)lz * sz;
92 for (
int fd = 0; fd < 3; ++fd) {
93 const long s = (fd == 0) ? sx : (fd == 1) ? sy : sz;
94 CCConst Uf = (fd == 0) ? U : (fd == 1) ? V : W;
95 CCConst Of = (fd == 0) ? ox : (fd == 1) ? oy : oz;
96 const double velm = Uf(i), velp = Uf(i + s);
97 const double om = Of(i), op = Of(i + s);
98 const double cLL = cOld(i - 2 * s), cL = cOld(i - s), cR = cOld(i), cRR = cOld(i + s),
99 cRRR = cOld(i + 2 * s);
104 }
else if (scheme == 2) {
105 Fp = op *
sadv::sou(cL, cR, cRR, cRRR, velp);
106 Fm = om *
sadv::sou(cLL, cL, cR, cRR, velm);
108 Fp = op *
sadv::tvd(cL, cR, cRR, cRRR, velp);
109 Fm = om *
sadv::tvd(cLL, cL, cR, cRR, velm);
113 b(i) = idt * cOld(i) - adv;
void scalarBuildDiffusionOpen(CCField AC, CCField AW, CCField AE, CCField AS, CCField AN, CCField AB, CCField AT, CCConst ox, CCConst oy, CCConst oz, double D, double idt, C3 e, int g)
void scalarBuildRhs(CCField b, CCConst cOld, CCConst U, CCConst V, CCConst W, CCConst ox, CCConst oy, CCConst oz, double idt, int scheme, C3 e, int g)