46 using MD = Kokkos::MDRangePolicy<CCExec, Kokkos::Rank<3>>;
50 const double p0 = cl.
p[0], p1 = cl.
p[1], p2 = cl.
p[2], p3 = cl.
p[3];
51 const bool haveIn1 = (in1.data() !=
nullptr) && (in1.extent(0) == out.extent(0));
53 const int nTab = cl.
nTab;
55 "peclet::flow::apply_closure", MD(space, {g, g, g}, {e.x - g, e.y - g, e.z - g}),
56 KOKKOS_LAMBDA(
int x,
int y,
int z) {
57 const long i = (long)x + (
long)y * e.x + (long)z * (
long)e.x * e.y;
61 v = p0 + p1 * in0(i) + (haveIn1 ? p2 * in1(i) : 0.0);
64 v = p0 * p1 * p2 * (in0(i) - p3);
67 v = p0 * Kokkos::exp(p1 * (1.0 / in0(i) - 1.0 / p2));
70 const double s = in0(i);
73 }
else if (s <= tx(0)) {
75 }
else if (s >= tx(nTab - 1)) {
78 int lo = 0, hi = nTab - 1;
80 const int mid = (lo + hi) / 2;
86 const double t = (s - tx(lo)) / (tx(hi) - tx(lo));
87 v = ty(lo) + t * (ty(hi) - ty(lo));