34 template<
class T,
class flt>
35 inline void fields_forward_euler(
u32 field_idx,
u32 derfield_idx, flt dt) {
37 using namespace shamrock::patch;
39 integrators::forward_euler(
40 shamsys::instance::get_compute_scheduler().get_queue(),
41 pdat.get_field<T>(field_idx).get_buf(),
42 pdat.get_field<T>(derfield_idx).get_buf(),
48 template<
class T,
class flt>
49 inline void fields_leapfrog_corrector(
50 u32 field_idx,
u32 derfield_idx,
u32 derfield_old_idx, flt hdt) {
52 using namespace shamrock::patch;
54 integrators::leapfrog_corrector(
55 shamsys::instance::get_compute_scheduler().get_queue(),
56 pdat.get_field<T>(field_idx).get_buf(),
57 pdat.get_field<T>(derfield_idx).get_buf(),
58 pdat.get_field<T>(derfield_old_idx).get_buf(),
64 template<
class T,
class flt>
65 inline void fields_leapfrog_corrector(
72 using namespace shamrock::patch;
74 integrators::leapfrog_corrector(
75 shamsys::instance::get_compute_scheduler().get_queue(),
76 pdat.get_field<T>(field_idx).get_buf(),
77 pdat.get_field<T>(derfield_idx).get_buf(),
78 derfield_old.get_field(cur_p.
id_patch).get_buf(),
79 field_epsilon.get_field(cur_p.
id_patch).get_buf(),
86 inline void fields_apply_periodicity(
u32 field_idx, std::pair<T, T> box) {
88 using namespace shamrock::patch;
90 utilities::sycl_position_modulo(
91 shamsys::instance::get_compute_scheduler().get_queue(),
92 pdat.get_field<T>(field_idx).get_buf(),
99 inline void fields_apply_shearing_periodicity(
105 shambase::VecComponent<T> shear_value,
106 shambase::VecComponent<T> shear_speed) {
109 using namespace shamrock::patch;
111 utilities::sycl_position_sheared_modulo(
112 shamsys::instance::get_compute_scheduler().get_queue(),
113 pdat.get_field<T>(field_idx).get_buf(),
114 pdat.get_field<T>(field_velocity).get_buf(),
125 inline void fields_swap(
u32 field_idx1,
u32 field_idx2) {
127 using namespace shamrock::patch;
129 utilities::swap_fields(
130 shamsys::instance::get_compute_scheduler().get_queue(),
131 pdat.get_field<T>(field_idx1).get_buf(),
132 pdat.get_field<T>(field_idx2).get_buf(),
138 inline T compute_rank_max(
u32 field_idx) {
140 using namespace shamrock::patch;
143 ret = sham::max(ret, pdat.get_field<T>(field_idx).compute_max());
150 inline T compute_rank_min(
u32 field_idx) {
152 using namespace shamrock::patch;
155 ret = sham::min(ret, pdat.get_field<T>(field_idx).compute_min());
162 inline T compute_rank_sum(
u32 field_idx) {
164 using namespace shamrock::patch;
167 ret += pdat.get_field<T>(field_idx).compute_sum();
174 inline shambase::VecComponent<T> compute_rank_dot_sum(
u32 field_idx) {
176 using namespace shamrock::patch;
177 shambase::VecComponent<T> ret = 0;
179 ret += pdat.get_field<T>(field_idx).compute_dot_sum();
197 using namespace shamrock::patch;
200 cfield.field_data.
add_obj(id_patch, pdat_field.duplicate(new_name));
210 using namespace shamrock::patch;
213 cfield.field_data.
add_obj(id_patch, pdat_field.duplicate(new_name));
230 using namespace shamrock::patch;
232 if (pdat.get_obj_cnt() == 0) {
235 auto it = cfield.field_data.
add_obj(
254 std::string new_name,
u32 nvar, std::function<
u32(
u64)> size_getter) {
257 using namespace shamrock::patch;
259 if (pdat.get_obj_cnt() == 0) {
262 auto it = cfield.field_data.
add_obj(
284 using namespace shamrock::patch;
286 auto it = cfield.field_data.
add_obj(
290 ins.override(value_init);