39 using namespace shamrock::patch;
43 field_data.
get(id_patch).resize(pdat.get_obj_cnt());
48 return field_data.
get(id_patch).get_buf();
53 return cfield.get_obj_cnt();
63 return field_data.template map<PatchDataFieldSpan<T, nvar>>(
65 return cfield.template get_span<nvar>();
70 get_field_span_nvar_dynamic() {
71 return field_data.template map<PatchDataFieldSpan<T, shamrock::dynamic_nvar>>(
73 return cfield.get_field_span_nvar_dynamic();
77 inline T compute_rank_max() {
81 if (!cfield.is_empty()) {
82 ret = sham::max(ret, cfield.compute_max());
89 inline T compute_rank_min() {
93 if (!cfield.is_empty()) {
94 ret = sham::min(ret, cfield.compute_min());
101 inline T compute_rank_sum() {
105 if (!cfield.is_empty()) {
106 ret += cfield.compute_sum();
113 inline T compute_rank_dot_sum() {
117 if (!cfield.is_empty()) {
118 ret += cfield.compute_dot_sum();
125 inline u32 get_nvar() {
127 std::optional<u32> nvar = std::nullopt;
130 u32 loc_nvar = cfield.get_nvar();
135 if (nvar != loc_nvar) {
137 shambase::format(
"mismatch in nvar excepted={} found={}", *nvar, loc_nvar));
143 "you cannot query this function when you have no fields");
149 inline std::unique_ptr<sycl::buffer<T>> rankgather_computefield(
PatchScheduler &sched) {
152 std::unique_ptr<sycl::buffer<T>> ret;
154 u64 num_obj = sched.get_rank_count();
155 u64 nvar = get_nvar();
158 ret = std::make_unique<sycl::buffer<T>>(num_obj * nvar);
160 using namespace shamrock::patch;
167 if (pdat.get_obj_cnt() > 0) {
168 write_with_offset_into(
169 shamsys::instance::get_compute_scheduler().get_queue(),
173 pdat.get_obj_cnt() * nvar);
175 ptr += pdat.get_obj_cnt() * nvar;
183 inline void reset() { field_data.
reset(); }