42 const Kokkos::View<Real*, peclet::core::MemSpace>& pos,
43 const Kokkos::View<Real*, peclet::core::MemSpace>& vol,
int N,
45 using Mem = peclet::core::MemSpace;
46 using Exec = peclet::core::ExecSpace;
48 using Kokkos::view_alloc;
49 using Kokkos::WithoutInitializing;
50 const Real Lx = L[0], Ly = L[1], Lz = L[2];
52 Kokkos::View<Real*, Mem> P = pos;
55 Kokkos::View<int*, Mem> facetCount(
"rp.facetCount",
static_cast<std::size_t
>(N));
57 "reevalPublish.count", Kokkos::RangePolicy<Exec>(0, N), KOKKOS_LAMBDA(
const int i) {
59 st.
load(i, c, Lx, Ly, Lz);
61 for (
int k = 0; k < c.np; ++k) {
63 for (
int t = 0; t < c.nt; ++t)
64 if (c.alive[t] && (c.t0[t] == k || c.t1[t] == k || c.t2[t] == k))
73 Kokkos::View<int*, Mem> base(view_alloc(std::string(
"rp.base"), WithoutInitializing),
74 static_cast<std::size_t
>(N));
77 Kokkos::View<int*, Mem> fc = facetCount, bs = base;
78 Kokkos::parallel_scan(
79 "reevalPublish.scan", N,
80 KOKKOS_LAMBDA(
const int i,
int& upd,
const bool final_pass) {
89 const std::size_t nF =
static_cast<std::size_t
>(nFacets);
90 Kokkos::View<gid_t*, Mem> fNbr(view_alloc(std::string(
"rp.fNbr"), WithoutInitializing), nF);
91 Kokkos::View<Real*, Mem> fArea(view_alloc(std::string(
"rp.fArea"), WithoutInitializing), nF * 3);
92 Kokkos::View<Real*, Mem> fDV(view_alloc(std::string(
"rp.fDV"), WithoutInitializing), nF * 3);
93 Kokkos::View<Real*, Mem> fConn(view_alloc(std::string(
"rp.fConn"), WithoutInitializing), nF * 3);
95 Kokkos::View<int*, Mem> bs = base;
97 "reevalPublish.fill", Kokkos::RangePolicy<Exec>(0, N), KOKKOS_LAMBDA(
const int i) {
99 st.
load(i, c, Lx, Ly, Lz);
100 c.reevalGeometry(P(3 * i), P(3 * i + 1), P(3 * i + 2), P.data(), Lx);
103 for (
int k = 0; k < c.np; ++k) {
105 for (
int t = 0; t < c.nt; ++t)
106 if (c.alive[t] && (c.t0[t] == k || c.t1[t] == k || c.t2[t] == k))
110 Real area[3] = {0, 0, 0}, dv[3] = {0, 0, 0}, conn[3];
111 conn[0] = Real(2) * c.n[k][0];
112 conn[1] = Real(2) * c.n[k][1];
113 conn[2] = Real(2) * c.n[k][2];
114 c.facetGeometry(k, area, dv, conn);
115 const std::size_t g =
static_cast<std::size_t
>(b + idx);
116 fNbr(g) =
static_cast<gid_t>(c.pnbr[k]);
117 for (
int cc = 0; cc < 3; ++cc) {
118 fArea(3 * g + cc) = area[cc];
119 fDV(3 * g + cc) = dv[cc];
120 fConn(3 * g + cc) = conn[cc];
133 view_alloc(std::string(
"rp.seedId"), WithoutInitializing),
static_cast<std::size_t
>(N));
135 Kokkos::View<gid_t*, Mem> vSeed = view.
cellSeedId;
136 Kokkos::parallel_for(
137 "reevalPublish.seedId", Kokkos::RangePolicy<Exec>(0, N),
138 KOKKOS_LAMBDA(
const int i) { vSeed(i) =
static_cast<gid_t>(i); });
TessellationView< Real > reevalPublish(const TopologyStore< MAXP, MAXT > &store, const Kokkos::View< Real *, peclet::core::MemSpace > &pos, const Kokkos::View< Real *, peclet::core::MemSpace > &vol, int N, const Real L[3])
Definition reeval_tessellation.hpp:41