18static int run(
int bc) {
20 std::mt19937 rng(100 +
SCHEME * 7 + bc);
21 std::uniform_real_distribution<float>
uc(0.05f, 0.95f);
22 std::uniform_real_distribution<float> us(-0.95f, -0.05f);
23 std::uniform_real_distribution<float>
uf(0.05f, 0.95f);
24 std::uniform_real_distribution<float>
u01(0.f, 1.f);
26 std::vector<float>
hc(
N),
hn((std::size_t)
N * 6);
27 for (
int i = 0;
i <
N; ++
i) {
31 for (
int k = 0;
k < 6; ++
k) {
37 hn[(std::size_t)
i * 6 +
k] =
solid ? us(rng) :
uf(rng);
42 Kokkos::View<float*, IMem>
dc(
"dc",
N),
dn(
"dn", (std::size_t)
N * 6);
44 auto m = Kokkos::create_mirror_view(
dc);
45 for (
int i = 0;
i <
N; ++
i)
47 Kokkos::deep_copy(
dc, m);
50 auto m = Kokkos::create_mirror_view(
dn);
51 for (std::size_t
i = 0;
i < (std::size_t)
N * 6; ++
i)
53 Kokkos::deep_copy(
dn, m);
56 Kokkos::View<int*, IMem>(
"nb",
N),
57 Kokkos::View<float*, IMem>(
"dr",
N),
58 Kokkos::View<int*, IMem>(
"dirc", (std::size_t)
N * 6),
59 Kokkos::View<float*, IMem>(
"K", (std::size_t)
N * 6),
60 Kokkos::View<float*, IMem>(
"M", (std::size_t)
N * 6),
61 Kokkos::View<float*, IMem>(
"X", (std::size_t)
N * 6),
62 Kokkos::View<float*, IMem>(
"Nbc", (std::size_t)
N * 6),
63 Kokkos::View<float*, IMem>(
"R", (std::size_t)
N * 6)};
67 for (
int k = 0;
k < 6; ++
k)
68 sn[
k] =
dn((std::size_t)
i * 6 +
k);
75 HOV h{Kokkos::View<int*, Kokkos::HostSpace>(
"hci",
N),
76 Kokkos::View<int*, Kokkos::HostSpace>(
"hnb",
N),
77 Kokkos::View<float*, Kokkos::HostSpace>(
"hdr",
N),
78 Kokkos::View<int*, Kokkos::HostSpace>(
"hdirc", (std::size_t)
N * 6),
79 Kokkos::View<float*, Kokkos::HostSpace>(
"hK", (std::size_t)
N * 6),
80 Kokkos::View<float*, Kokkos::HostSpace>(
"hM", (std::size_t)
N * 6),
81 Kokkos::View<float*, Kokkos::HostSpace>(
"hX", (std::size_t)
N * 6),
82 Kokkos::View<float*, Kokkos::HostSpace>(
"hNbc", (std::size_t)
N * 6),
83 Kokkos::View<float*, Kokkos::HostSpace>(
"hR", (std::size_t)
N * 6)};
84 for (
int i = 0;
i <
N; ++
i) {
86 for (
int k = 0;
k < 6; ++
k)
87 sn[
k] =
hn[(std::size_t)
i * 6 +
k];
91 auto cmp1i = [&](Kokkos::View<int*, IMem> dv, Kokkos::View<int*, Kokkos::HostSpace>
hv,
93 auto m = Kokkos::create_mirror_view(dv);
94 Kokkos::deep_copy(m, dv);
96 for (std::size_t
i = 0;
i < n; ++
i)
101 auto cmp1f = [&](Kokkos::View<float*, IMem> dv, Kokkos::View<float*, Kokkos::HostSpace>
hv,
103 auto m = Kokkos::create_mirror_view(dv);
104 Kokkos::deep_copy(m, dv);
106 for (std::size_t
i = 0;
i < n; ++
i)
107 if (std::fabs((
double)m(
i) - (
double)
hv(
i)) > 1e-5 * (1.0 + std::fabs((
double)
hv(
i))))
112 bad +=
cmp1i(dev.cell_index,
h.cell_index,
N) +
cmp1i(dev.num_boundaries,
h.num_boundaries,
N) +
113 cmp1i(dev.dir_code,
h.dir_code, (std::size_t)
N * 6);
115 bad +=
cmp1f(dev.K_val,
h.K_val, (std::size_t)
N * 6) +
116 cmp1f(dev.M_val,
h.M_val, (std::size_t)
N * 6) +
117 cmp1f(dev.X_val,
h.X_val, (std::size_t)
N * 6) +
118 cmp1f(dev.Nbc_val,
h.Nbc_val, (std::size_t)
N * 6) +
119 cmp1f(dev.R_val,
h.R_val, (std::size_t)
N * 6);
void ibmFillEntry(const OV &o, int list_idx, int c_idx, float sdf_c, const float sdf_n[6], int bc_type, const float *thEx)