5#include <Kokkos_Core.hpp>
15 std::fprintf(stderr, "CHECK failed: %s\n at %s:%d\n", #cond, __FILE__, __LINE__); \
23 s.setPressureGeometry(std::vector<double>((std::size_t)
N *
N * 4, 10.0));
24 s.addScalar(
"T", 0.0, 1, 1);
26 std::vector<double> T((std::size_t)
N *
N * 4);
27 for (std::size_t i = 0; i < T.size(); ++i)
28 T[i] = 0.6 + 0.3 * std::sin(0.7 * i);
35 {1.0, 9.81, 0.1, 0.5});
39 auto rho = s.getField(
"rho");
40 auto fy = s.getField(
"force_y");
41 auto mu2 = s.getField(
"mu2");
43 for (std::size_t i = 0; i < T.size(); ++i) {
44 emax = std::fmax(emax, std::fabs(rho[i] - (2.0 - 0.5 * T[i])));
45 emax = std::fmax(emax, std::fabs(fy[i] - 9.81 * 0.1 * (T[i] - 0.5)));
46 emax = std::fmax(emax, std::fabs(mu2[i] - 0.01 * std::exp(0.3 * (1.0 / T[i] - 1.0))));
48 std::printf(
"closures max-err vs oracle %.2e\n", emax);
50 CHECK(s.hasField(
"force_x") && s.hasField(
"force_z"));
54int main(
int argc,
char** argv) {
55 Kokkos::initialize(argc, argv);
62 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)