29 auto dev_sched = shamsys::instance::get_compute_scheduler_ptr();
32 Tscal gpart_mass = solver_config.gpart_mass;
35 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 if (!storage.sinks.is_empty()) {
67 std::vector<Sink> &sink_parts = storage.sinks.get();
68 for (Sink &s : sink_parts) {
69 sum_p += s.mass * s.velocity;
72 cv_checks += shambase::format(
" sum v = {}\n", sum_p);
81 tmpa += field.compute_sum();
83 Tvec sum_a = gpart_mass * shamalgs::collective::allreduce_sum(tmpa);
86 if (!storage.sinks.is_empty()) {
87 std::vector<Sink> &sink_parts = storage.sinks.get();
88 for (Sink &s : sink_parts) {
89 sum_a += s.mass * (s.sph_acceleration + s.ext_acceleration);
92 cv_checks += shambase::format(
" sum a = {}\n", sum_a);
102 tmpe += field_u.compute_sum() + 0.5 * field_v.compute_dot_sum();
104 Tscal sum_e = gpart_mass * shamalgs::collective::allreduce_sum(tmpe);
107 cv_checks += shambase::format(
" sum e = {}\n", sum_e);
110 Tscal pmass = gpart_mass;
120 Tscal
const mu_0 = solver_config.get_constant_mu_0();
124 sham::MultiRef{field_du.get_buf(), field_v.get_buf(), field_a.get_buf()},
127 [=](
u32 item,
const Tscal *du,
const Tvec *v,
const Tvec *a, Tscal *de) {
128 de[item] = pmass * (sycl::dot(v[item], a[item]) + du[item]);
139 field_hpart.get_buf(),
140 field_B_on_rho.get_buf(),
141 field_dB_on_rho.get_buf(),
142 field_drho_dt.get_buf()},
147 const Tvec *B_on_rho,
148 const Tvec *dB_on_rho,
149 const Tscal *drho_dt,
151 using namespace shamrock::sph;
152 Tscal h = hpart[item];
155 Tvec B_on_rho_a = B_on_rho[item];
156 Tvec B = B_on_rho_a * shamrock::sph::rho_h(pmass, h, Kernel::hfactd);
157 Tvec dB_on_rho_a = dB_on_rho[item];
158 Tscal drho = drho_dt[item];
159 term_B = 0.5 * (1. / mu_0) * sycl::dot(B_on_rho_a, B_on_rho_a) * drho
160 + (1. / mu_0) * sycl::dot(B, dB_on_rho_a);
162 de[item] += pmass * term_B;
170 Tscal de = shamalgs::collective::allreduce_sum(tmp_de);
173 cv_checks += shambase::format(
" sum de = {}", de);
177 logger::info_ln(
"sph::Model", cv_checks);