30 auto edges = get_edges();
32 auto dev_sched = shamsys::instance::get_compute_scheduler_ptr();
34 edges.omega.ensure_sizes(edges.part_counts.indexes);
39 edges.xyz.get_spans(), edges.hpart.get_spans(), edges.neigh_cache.neigh_cache},
41 edges.part_counts.indexes,
42 [part_mass = this->part_mass, Rkern = kernel_radius](
43 u32 id_a,
const Tvec *r,
const Tscal *hpart,
const auto ploop_ptrs, Tscal *omega) {
48 Tscal h_a = hpart[id_a];
49 Tscal dint = h_a * h_a * Rkern * Rkern;
52 Tscal part_omega_sum = 0;
54 particle_looper.for_each_object(id_a, [&](
u32 id_b) {
55 Tvec dr = xyz_a - r[id_b];
56 Tscal rab2 = sycl::dot(dr, dr);
62 Tscal rab = sycl::sqrt(rab2);
64 rho_sum += part_mass * SPHKernel<Tscal>::W_3d(rab, h_a);
65 part_omega_sum += part_mass * SPHKernel<Tscal>::dhW_3d(rab, h_a);
68 using namespace shamrock::sph;
70 Tscal rho_ha = rho_h(part_mass, h_a, SPHKernel<Tscal>::hfactd);
71 Tscal omega_a = 1 + (h_a / (3 * rho_ha)) * part_omega_sum;
72 omega[id_a] = omega_a;
85 auto edges = get_edges();
87 auto dev_sched = shamsys::instance::get_compute_scheduler_ptr();
89 edges.mask.check_sizes(edges.part_counts.indexes);
90 edges.field_to_set.ensure_sizes(edges.part_counts.indexes);
96 edges.part_counts.indexes,
97 [val_to_set = this->val_to_set](
u32 id,
const u32 *mask, T *field_to_set) {
99 field_to_set[id] = val_to_set;
void distributed_data_kernel_call(sham::DeviceScheduler_ptr dev_sched, RefIn in, RefOut in_out, const shambase::DistributedData< index_t > &thread_counts, Functor &&func)
A variant of sham::kernel_call for distributed data.