28 class SchedulerUtility {
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;
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;
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;
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(),
80 pdat.get_obj_cnt() * derfield_old.get_nvar(),
86 inline void fields_apply_periodicity(
u32 field_idx, std::pair<T, T> box) {
88 using namespace shamrock::patch;
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;
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;
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;
141 T ret = shambase::VectorProperties<T>::get_min();
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;
153 T ret = shambase::VectorProperties<T>::get_max();
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;
165 T ret = shambase::VectorProperties<T>::get_zero();
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);
void sycl_position_sheared_modulo(sham::DeviceQueue &queue, sham::DeviceBuffer< T > &buf_xyz, sham::DeviceBuffer< T > &buf_vxyz, sycl::range< 1 > elem_range, std::pair< T, T > box, i32_3 shear_base, i32_3 shear_dir, shambase::VecComponent< T > shear_value, shambase::VecComponent< T > shear_speed)
Apply periodic boundary conditions with shearing.
void leapfrog_corrector(sham::DeviceQueue &queue, sham::DeviceBuffer< T > &buf_val, sham::DeviceBuffer< T > &buf_der, sham::DeviceBuffer< T > &buf_der_old, sham::DeviceBuffer< flt > &buf_eps_sq, sycl::range< 1 > elem_range, flt hdt)
Perform leapfrog corrector step with adaptive softening.