30 auto dev_sched = shamsys::instance::get_compute_scheduler_ptr();
33 Tscal gpart_mass = solver_config.gpart_mass;
36 using namespace shamrock::patch;
48 bool has_B_field = solver_config.has_field_B_on_rho();
50 const u32 idB_on_rho = (has_B_field) ? pdl.
get_field_idx<Tvec>(
"dB/rho") : -1;
51 const u32 idrho_dt = (has_B_field) ? pdl.
get_field_idx<Tscal>(
"drho/dt") : -1;
53 std::string cv_checks =
"conservation infos :\n";
61 tmpp += field.compute_sum();
63 Tvec sum_p = gpart_mass * shamalgs::collective::allreduce_sum(tmpp);
66 auto &sync = scheduler().synchronized_data;
67 auto &mass = get_sink_mass<Tvec>(sync);
69 auto &vel = get_sink_vel<Tvec>(sync);
70 for (
size_t i = 0; i < mass.size(); i++) {
71 sum_p += mass[i] * vel[i];
74 cv_checks += shambase::format(
" sum v = {}\n", sum_p);
83 tmpa += field.compute_sum();
85 Tvec sum_a = gpart_mass * shamalgs::collective::allreduce_sum(tmpa);
88 auto &sync = scheduler().synchronized_data;
89 auto &mass = get_sink_mass<Tvec>(sync);
91 auto &acc_sph = get_sink_acc_sph<Tvec>(sync);
92 auto &acc_ext = get_sink_acc_ext<Tvec>(sync);
93 for (
size_t i = 0; i < mass.size(); i++) {
94 sum_a += mass[i] * (acc_sph[i] + acc_ext[i]);
97 cv_checks += shambase::format(
" sum a = {}\n", sum_a);
107 tmpe += field_u.compute_sum() + 0.5 * field_v.compute_dot_sum();
109 Tscal sum_e = gpart_mass * shamalgs::collective::allreduce_sum(tmpe);
112 cv_checks += shambase::format(
" sum e = {}\n", sum_e);
115 Tscal pmass = gpart_mass;
125 Tscal
const mu_0 = solver_config.get_constant_mu_0();
129 sham::MultiRef{field_du.get_buf(), field_v.get_buf(), field_a.get_buf()},
132 [=](
u32 item,
const Tscal *du,
const Tvec *v,
const Tvec *a, Tscal *de) {
133 de[item] = pmass * (sycl::dot(v[item], a[item]) + du[item]);
144 field_hpart.get_buf(),
145 field_B_on_rho.get_buf(),
146 field_dB_on_rho.get_buf(),
147 field_drho_dt.get_buf()},
152 const Tvec *B_on_rho,
153 const Tvec *dB_on_rho,
154 const Tscal *drho_dt,
156 using namespace shamrock::sph;
157 Tscal h = hpart[item];
160 Tvec B_on_rho_a = B_on_rho[item];
161 Tvec B = B_on_rho_a * shamrock::sph::rho_h(pmass, h, Kernel::hfactd);
162 Tvec dB_on_rho_a = dB_on_rho[item];
163 Tscal drho = drho_dt[item];
164 term_B = 0.5 * (1. / mu_0) * sycl::dot(B_on_rho_a, B_on_rho_a) * drho
165 + (1. / mu_0) * sycl::dot(B, dB_on_rho_a);
167 de[item] += pmass * term_B;
175 Tscal de = shamalgs::collective::allreduce_sum(tmp_de);
178 cv_checks += shambase::format(
" sum de = {}", de);