5#include <Kokkos_Core.hpp>
15 std::fprintf(stderr, "CHECK failed: %s\n at %s:%d\n", #cond, __FILE__, __LINE__); \
22 const int nx = 6, ny = 5, nz = 4;
23 IbmSolver s(nx, ny, nz);
26 CHECK(s.hasField(
"u") && s.hasField(
"v") && s.hasField(
"w"));
27 CHECK(s.hasField(
"p") && s.hasField(
"sdf"));
28 CHECK(!s.hasField(
"temperature"));
29 auto names = s.fieldNames();
30 CHECK(names.size() == 5);
31 CHECK(names.front() ==
"p");
34 s.addField(
"temperature");
35 CHECK(s.hasField(
"temperature"));
36 std::vector<double> in((std::size_t)nx * ny * nz);
37 for (std::size_t i = 0; i < in.size(); ++i)
38 in[i] = 1.0 + (
double)i;
39 s.setField(
"temperature", in);
40 auto out = s.getField(
"temperature");
41 CHECK(out.size() == in.size());
43 for (std::size_t i = 0; i < in.size(); ++i)
44 exact = exact && (out[i] == in[i]);
49 auto fv = s.fieldView(
"temperature");
50 const auto bs = s.blockShape();
51 const int g = s.ghostWidth();
52 const long ex = bs[0], ey = bs[1];
54 const long inner0 = g + (long)g * ex + (
long)g * ex * ey;
55 auto h = Kokkos::create_mirror_view(fv);
56 Kokkos::deep_copy(h, fv);
57 CHECK(h(inner0) == in[0]);
59 Kokkos::deep_copy(fv, h);
60 CHECK(s.getField(
"temperature")[0] == 123.0);
63 s.addField(
"temperature");
64 CHECK(s.getField(
"temperature")[0] == 123.0);
68int main(
int argc,
char** argv) {
69 Kokkos::initialize(argc, argv);
76 std::fprintf(stderr,
"%d failure(s)\n", failures);
flow — host-facing Kokkos IBM Navier-Stokes solver (drop-in flow-style API).
int main(int argc, char **argv)