38template<
class Tvec,
template<
class>
class SPHKernel>
41 Cfg_AV cfg_av = solver_config.artif_viscosity;
42 Cfg_MHD cfg_mhd = solver_config.mhd_config;
44 if (Constant *v = std::get_if<Constant>(&cfg_av.config)) {
45 update_derivs_constantAV(*v);
46 }
else if (VaryingMM97 *v = std::get_if<VaryingMM97>(&cfg_av.config)) {
47 update_derivs_mm97(*v);
48 }
else if (VaryingCD10 *v = std::get_if<VaryingCD10>(&cfg_av.config)) {
49 update_derivs_cd10(*v);
50 }
else if (ConstantDisc *v = std::get_if<ConstantDisc>(&cfg_av.config)) {
51 update_derivs_disc_visco(*v);
52 }
else if (IdealMHD *v = std::get_if<IdealMHD>(&cfg_mhd.config)) {
53 update_derivs_MHD(*v);
54 }
else if (NonIdealMHD *v = std::get_if<NonIdealMHD>(&cfg_mhd.config)) {
56 }
else if (NoneMHD *v = std::get_if<NoneMHD>(&cfg_mhd.config)) {
58 }
else if (None *v = std::get_if<None>(&cfg_av.config)) {
65template<
class Tvec,
template<
class>
class SPHKernel>
68template<
class Tvec,
template<
class>
class SPHKernel>
74 using namespace shamrock::patch;
87 u32 ihpart_interf = ghost_layout.get_field_idx<Tscal>(
"hpart");
88 u32 iuint_interf = ghost_layout.get_field_idx<Tscal>(
"uint");
89 u32 ivxyz_interf = ghost_layout.get_field_idx<Tvec>(
"vxyz");
90 u32 iomega_interf = ghost_layout.get_field_idx<Tscal>(
"omega");
92 auto &merged_xyzh = storage.merged_xyzh.get();
100 = merged_xyzh.get(cur_p.
id_patch).template get_field_buf_ref<Tvec>(0);
112 sycl::range range_npart{pdat.get_obj_cnt()};
124 auto du = buf_duint.get_write_access(depends_list);
125 auto vxyz = buf_vxyz.get_read_access(depends_list);
126 auto hpart = buf_hpart.get_read_access(depends_list);
127 auto omega = buf_omega.get_read_access(depends_list);
128 auto u = buf_uint.get_read_access(depends_list);
129 auto pressure = buf_pressure.get_read_access(depends_list);
131 auto ploop_ptrs = pcache.get_read_access(depends_list);
133 auto e = q.
submit(depends_list, [&](sycl::handler &cgh) {
134 const Tscal pmass = solver_config.gpart_mass;
135 const Tscal alpha_u = cfg.alpha_u;
136 const Tscal alpha_AV = cfg.alpha_AV;
137 const Tscal beta_AV = cfg.beta_AV;
139 shamlog_debug_sycl_ln(
"deriv kernel",
"alpha_u :", alpha_u);
140 shamlog_debug_sycl_ln(
"deriv kernel",
"alpha_AV :", alpha_AV);
141 shamlog_debug_sycl_ln(
"deriv kernel",
"beta_AV :", beta_AV);
154 constexpr Tscal Rker2 = Kernel::Rkern * Kernel::Rkern;
156 shambase::parallel_for(cgh, pdat.get_obj_cnt(),
"compute force cte AV", [=](
u64 gid) {
157 u32 id_a = (u32) gid;
159 using namespace shamrock::sph;
161 Tvec sum_axyz = {0, 0, 0};
164 Tscal h_a =
hpart[id_a];
165 Tvec xyz_a =
xyz[id_a];
166 Tvec vxyz_a =
vxyz[id_a];
168 Tscal omega_a =
omega[id_a];
169 const Tscal u_a = u[id_a];
171 Tscal rho_a = rho_h(pmass, h_a, Kernel::hfactd);
172 Tscal rho_a_sq = rho_a * rho_a;
173 Tscal rho_a_inv = 1. / rho_a;
177 Tscal omega_a_rho_a_inv = 1 / (omega_a * rho_a);
179 Tscal cs_a = cs[id_a];
181 Tvec force_pressure{0, 0, 0};
182 Tscal tmpdU_pressure = 0;
184 particle_looper.for_each_object(id_a, [&](
u32 id_b) {
186 Tvec dr = xyz_a -
xyz[id_b];
187 Tscal rab2 = sycl::dot(dr, dr);
188 Tscal h_b =
hpart[id_b];
190 if (rab2 > h_a * h_a * Rker2 && rab2 > h_b * h_b * Rker2) {
194 Tscal rab = sycl::sqrt(rab2);
195 Tvec vxyz_b =
vxyz[id_b];
196 const Tscal u_b = u[id_b];
198 Tscal rho_b = rho_h(pmass, h_b, Kernel::hfactd);
201 Tscal omega_b =
omega[id_b];
202 Tscal cs_b = cs[id_b];
204 const Tscal alpha_a = alpha_AV;
205 const Tscal alpha_b = alpha_AV;
207 Tscal Fab_a = Kernel::dW_3d(rab, h_a);
208 Tscal Fab_b = Kernel::dW_3d(rab, h_b);
210 Tvec v_ab = vxyz_a - vxyz_b;
215 Tscal v_ab_r_ab = sycl::dot(v_ab, r_ab_unit);
216 Tscal abs_v_ab_r_ab = sycl::fabs(v_ab_r_ab);
218 Tscal vsig_a = alpha_a * cs_a + beta_AV * abs_v_ab_r_ab;
219 Tscal vsig_b = alpha_b * cs_b + beta_AV * abs_v_ab_r_ab;
221 Tscal vsig_u = shamrock::sph::vsig_u(P_a, P_b, rho_a, rho_b);
226 add_to_derivs_sph_artif_visco_cond(
249 axyz[id_a] = force_pressure;
250 du[id_a] = tmpdU_pressure;
256 buf_duint.complete_event_state(e);
257 buf_vxyz.complete_event_state(e);
258 buf_hpart.complete_event_state(e);
259 buf_omega.complete_event_state(e);
260 buf_uint.complete_event_state(e);
261 buf_pressure.complete_event_state(e);
266 pcache.complete_event_state(resulting_events);
269template<
class Tvec,
template<
class>
class SPHKernel>
274 using namespace shamrock::patch;
287 u32 ihpart_interf = ghost_layout.get_field_idx<Tscal>(
"hpart");
288 u32 iuint_interf = ghost_layout.get_field_idx<Tscal>(
"uint");
289 u32 ivxyz_interf = ghost_layout.get_field_idx<Tvec>(
"vxyz");
290 u32 iomega_interf = ghost_layout.get_field_idx<Tscal>(
"omega");
292 auto &merged_xyzh = storage.merged_xyzh.get();
298 auto &xyz_refs = storage.positions_with_ghosts;
299 auto &pressure_field = storage.pressure;
300 auto &soundspeed_field = storage.soundspeed;
302 std::shared_ptr<shamrock::solvergraph::FieldRefs<Tscal>> uint_refs
303 = std::make_shared<shamrock::solvergraph::FieldRefs<Tscal>>(
"uint",
"u");
308 return std::ref(mpdat.get_field<Tscal>(iuint_interf));
312 std::shared_ptr<shamrock::solvergraph::FieldRefs<Tvec>> vxyz_refs
313 = std::make_shared<shamrock::solvergraph::FieldRefs<Tvec>>(
"vxyz",
"v");
318 return std::ref(mpdat.get_field<Tvec>(ivxyz_interf));
322 std::shared_ptr<shamrock::solvergraph::FieldRefs<Tscal>> hpart_refs
323 = std::make_shared<shamrock::solvergraph::FieldRefs<Tscal>>(
"hpart",
"h");
328 return std::ref(mpdat.get_field<Tscal>(ihpart_interf));
332 std::shared_ptr<shamrock::solvergraph::FieldRefs<Tscal>> omega_refs
333 = std::make_shared<shamrock::solvergraph::FieldRefs<Tscal>>(
"omega",
"omega");
338 return std::ref(mpdat.get_field<Tscal>(iomega_interf));
342 std::shared_ptr<shamrock::solvergraph::FieldRefs<Tscal>> alpha_av_refs
343 = std::make_shared<shamrock::solvergraph::FieldRefs<Tscal>>(
"alpha_av",
"alpha_av");
348 cur_p.
id_patch, std::ref(storage.alpha_av_ghost.get().get(cur_p.
id_patch)));
360 std::shared_ptr<shamrock::solvergraph::ScalarEdge<Tscal>> alpha_u
361 = std::make_shared<shamrock::solvergraph::ScalarEdge<Tscal>>(
"alpha_u",
"alpha_u");
365 std::shared_ptr<shamrock::solvergraph::ScalarEdge<Tscal>> beta_AV
366 = std::make_shared<shamrock::solvergraph::ScalarEdge<Tscal>>(
"beta_AV",
"beta_AV");
371 std::shared_ptr<NodeUpdateDerivsVaryingAlphaAV<Tvec, SPHKernel>> node
372 = std::make_shared<NodeUpdateDerivsVaryingAlphaAV<Tvec, SPHKernel>>();
379 part_counts_with_ghost,
394template<
class Tvec,
template<
class>
class SPHKernel>
399 using namespace shamrock::patch;
412 u32 ihpart_interf = ghost_layout.get_field_idx<Tscal>(
"hpart");
413 u32 iuint_interf = ghost_layout.get_field_idx<Tscal>(
"uint");
414 u32 ivxyz_interf = ghost_layout.get_field_idx<Tvec>(
"vxyz");
415 u32 iomega_interf = ghost_layout.get_field_idx<Tscal>(
"omega");
417 auto &merged_xyzh = storage.merged_xyzh.get();
423 auto &xyz_refs = storage.positions_with_ghosts;
424 auto &pressure_field = storage.pressure;
425 auto &soundspeed_field = storage.soundspeed;
427 std::shared_ptr<shamrock::solvergraph::FieldRefs<Tscal>> uint_refs
428 = std::make_shared<shamrock::solvergraph::FieldRefs<Tscal>>(
"uint",
"u");
433 return std::ref(mpdat.get_field<Tscal>(iuint_interf));
437 std::shared_ptr<shamrock::solvergraph::FieldRefs<Tvec>> vxyz_refs
438 = std::make_shared<shamrock::solvergraph::FieldRefs<Tvec>>(
"vxyz",
"v");
443 return std::ref(mpdat.get_field<Tvec>(ivxyz_interf));
447 std::shared_ptr<shamrock::solvergraph::FieldRefs<Tscal>> hpart_refs
448 = std::make_shared<shamrock::solvergraph::FieldRefs<Tscal>>(
"hpart",
"h");
453 return std::ref(mpdat.get_field<Tscal>(ihpart_interf));
457 std::shared_ptr<shamrock::solvergraph::FieldRefs<Tscal>> omega_refs
458 = std::make_shared<shamrock::solvergraph::FieldRefs<Tscal>>(
"omega",
"omega");
463 return std::ref(mpdat.get_field<Tscal>(iomega_interf));
467 std::shared_ptr<shamrock::solvergraph::FieldRefs<Tscal>> alpha_av_refs
468 = std::make_shared<shamrock::solvergraph::FieldRefs<Tscal>>(
"alpha_av",
"alpha_av");
473 cur_p.
id_patch, std::ref(storage.alpha_av_ghost.get().get(cur_p.
id_patch)));
485 std::shared_ptr<shamrock::solvergraph::ScalarEdge<Tscal>> alpha_u
486 = std::make_shared<shamrock::solvergraph::ScalarEdge<Tscal>>(
"alpha_u",
"alpha_u");
490 std::shared_ptr<shamrock::solvergraph::ScalarEdge<Tscal>> beta_AV
491 = std::make_shared<shamrock::solvergraph::ScalarEdge<Tscal>>(
"beta_AV",
"beta_AV");
496 std::shared_ptr<NodeUpdateDerivsVaryingAlphaAV<Tvec, SPHKernel>> node
497 = std::make_shared<NodeUpdateDerivsVaryingAlphaAV<Tvec, SPHKernel>>();
504 part_counts_with_ghost,
520template<
class Tvec,
template<
class>
class SPHKernel>
526 using namespace shamrock::patch;
539 u32 ihpart_interf = ghost_layout.get_field_idx<Tscal>(
"hpart");
540 u32 iuint_interf = ghost_layout.get_field_idx<Tscal>(
"uint");
541 u32 ivxyz_interf = ghost_layout.get_field_idx<Tvec>(
"vxyz");
542 u32 iomega_interf = ghost_layout.get_field_idx<Tscal>(
"omega");
544 auto &merged_xyzh = storage.merged_xyzh.get();
552 = merged_xyzh.get(cur_p.
id_patch).template get_field_buf_ref<Tvec>(0);
564 sycl::range range_npart{pdat.get_obj_cnt()};
576 auto du = buf_duint.get_write_access(depends_list);
577 auto vxyz = buf_vxyz.get_read_access(depends_list);
578 auto hpart = buf_hpart.get_read_access(depends_list);
579 auto omega = buf_omega.get_read_access(depends_list);
580 auto u = buf_uint.get_read_access(depends_list);
581 auto pressure = buf_pressure.get_read_access(depends_list);
583 auto ploop_ptrs = pcache.get_read_access(depends_list);
585 auto e = q.
submit(depends_list, [&](sycl::handler &cgh) {
586 const Tscal pmass = solver_config.gpart_mass;
587 const Tscal alpha_AV = cfg.alpha_AV;
588 const Tscal alpha_u = cfg.alpha_u;
589 const Tscal beta_AV = cfg.beta_AV;
591 shamlog_debug_sycl_ln(
"deriv kernel",
"alpha_AV :", alpha_AV);
592 shamlog_debug_sycl_ln(
"deriv kernel",
"alpha_u :", alpha_u);
593 shamlog_debug_sycl_ln(
"deriv kernel",
"beta_AV :", beta_AV);
606 constexpr Tscal Rker2 = Kernel::Rkern * Kernel::Rkern;
608 shambase::parallel_for(cgh, pdat.get_obj_cnt(),
"compute force disc", [=](
u64 gid) {
609 u32 id_a = (u32) gid;
611 using namespace shamrock::sph;
613 Tvec sum_axyz = {0, 0, 0};
616 Tscal h_a =
hpart[id_a];
617 Tvec xyz_a =
xyz[id_a];
618 Tvec vxyz_a =
vxyz[id_a];
620 Tscal cs_a = cs[id_a];
621 Tscal omega_a =
omega[id_a];
622 const Tscal u_a = u[id_a];
624 Tscal rho_a = rho_h(pmass, h_a, Kernel::hfactd);
625 Tscal rho_a_sq = rho_a * rho_a;
626 Tscal rho_a_inv = 1. / rho_a;
630 Tscal omega_a_rho_a_inv = 1 / (omega_a * rho_a);
632 Tvec force_pressure{0, 0, 0};
633 Tscal tmpdU_pressure = 0;
635 particle_looper.for_each_object(id_a, [&](
u32 id_b) {
637 Tvec dr = xyz_a -
xyz[id_b];
638 Tscal rab2 = sycl::dot(dr, dr);
639 Tscal h_b =
hpart[id_b];
641 if (rab2 > h_a * h_a * Rker2 && rab2 > h_b * h_b * Rker2) {
645 Tvec vxyz_b =
vxyz[id_b];
646 const Tscal u_b = u[id_b];
648 Tscal omega_b =
omega[id_b];
649 Tscal cs_b = cs[id_b];
651 Tscal rab = sycl::sqrt(rab2);
653 Tscal rho_b = rho_h(pmass, h_b, Kernel::hfactd);
654 const Tscal alpha_a = alpha_AV;
655 const Tscal alpha_b = alpha_AV;
656 Tscal Fab_a = Kernel::dW_3d(rab, h_a);
657 Tscal Fab_b = Kernel::dW_3d(rab, h_b);
659 Tvec v_ab = vxyz_a - vxyz_b;
664 Tscal v_ab_r_ab = sycl::dot(v_ab, r_ab_unit);
665 Tscal abs_v_ab_r_ab = sycl::fabs(v_ab_r_ab);
667 Tscal vsig_a = alpha_a * cs_a + beta_AV * abs_v_ab_r_ab;
668 Tscal vsig_b = alpha_b * cs_b + beta_AV * abs_v_ab_r_ab;
670 Tscal vsig_u = shamrock::sph::vsig_u(P_a, P_b, rho_a, rho_b);
672 Tscal qa_ab = shamrock::sph::q_av_disc(
673 rho_a, h_a, rab, alpha_a, cs_a, vsig_a, v_ab_r_ab);
674 Tscal qb_ab = shamrock::sph::q_av_disc(
675 rho_b, h_b, rab, alpha_b, cs_b, vsig_b, v_ab_r_ab);
677 add_to_derivs_sph_artif_visco_cond(
702 axyz[id_a] = force_pressure;
703 du[id_a] = tmpdU_pressure;
709 buf_duint.complete_event_state(e);
710 buf_vxyz.complete_event_state(e);
711 buf_hpart.complete_event_state(e);
712 buf_omega.complete_event_state(e);
713 buf_uint.complete_event_state(e);
714 buf_pressure.complete_event_state(e);
719 pcache.complete_event_state(resulting_events);
723template<
class Tvec,
template<
class>
class SPHKernel>
728 using namespace shamrock::patch;
744 bool do_MHD_debug = solver_config.do_MHD_debug();
745 const u32 imag_pressure = (do_MHD_debug) ? pdl.
get_field_idx<Tvec>(
"mag_pressure") : -1;
746 const u32 imag_tension = (do_MHD_debug) ? pdl.
get_field_idx<Tvec>(
"mag_tension") : -1;
747 const u32 igas_pressure = (do_MHD_debug) ? pdl.
get_field_idx<Tvec>(
"gas_pressure") : -1;
748 const u32 itensile_corr = (do_MHD_debug) ? pdl.
get_field_idx<Tvec>(
"tensile_corr") : -1;
749 const u32 ipsi_propag = (do_MHD_debug) ? pdl.
get_field_idx<Tscal>(
"psi_propag") : -1;
750 const u32 ipsi_diff = (do_MHD_debug) ? pdl.
get_field_idx<Tscal>(
"psi_diff") : -1;
751 const u32 ipsi_cons = (do_MHD_debug) ? pdl.
get_field_idx<Tscal>(
"psi_cons") : -1;
755 Tscal
const mu_0 = solver_config.get_constant_mu_0();
768 auto &merged_xyzh = storage.merged_xyzh.get();
776 = merged_xyzh.get(cur_p.
id_patch).template get_field_buf_ref<Tvec>(0);
795 = mpdat.get_field_buf_ref<Tscal>(ipsi_on_ch_interf);
800 sycl::range range_npart{pdat.get_obj_cnt()};
812 auto du = buf_duint.get_write_access(depends_list);
813 auto vxyz = buf_vxyz.get_read_access(depends_list);
814 auto hpart = buf_hpart.get_read_access(depends_list);
815 auto omega = buf_omega.get_read_access(depends_list);
816 auto u = buf_uint.get_read_access(depends_list);
817 auto pressure = buf_pressure.get_read_access(depends_list);
819 auto B_on_rho = buf_B_on_rho.get_read_access(depends_list);
820 auto psi_on_ch = buf_psi_on_ch.get_read_access(depends_list);
822 auto dpsi_on_ch = buf_dpsi_on_ch.get_write_access(depends_list);
823 auto drho_dt = buf_drho_dt.get_write_access(depends_list);
827 ? pdat.get_field_buf_ref<Tvec>(imag_pressure).get_write_access(depends_list)
831 ? pdat.get_field_buf_ref<Tvec>(imag_tension).get_write_access(depends_list)
835 ? pdat.get_field_buf_ref<Tvec>(igas_pressure).get_write_access(depends_list)
839 ? pdat.get_field_buf_ref<Tvec>(itensile_corr).get_write_access(depends_list)
844 ? pdat.get_field_buf_ref<Tscal>(ipsi_propag).get_write_access(depends_list)
848 ? pdat.get_field_buf_ref<Tscal>(ipsi_diff).get_write_access(depends_list)
852 ? pdat.get_field_buf_ref<Tscal>(ipsi_cons).get_write_access(depends_list)
855 Tscal *u_mhd = (do_MHD_debug)
856 ? pdat.get_field_buf_ref<Tscal>(iu_mhd).get_write_access(depends_list)
859 auto ploop_ptrs = pcache.get_read_access(depends_list);
861 auto e = q.
submit(depends_list, [&](sycl::handler &cgh) {
862 const Tscal pmass = solver_config.gpart_mass;
863 const Tscal sigma_mhd = cfg.sigma_mhd;
864 const Tscal alpha_u = cfg.alpha_u;
866 shamlog_debug_ln(
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
"");
867 shamlog_debug_sycl_ln(
"deriv kernel",
"sigma_mhd :", sigma_mhd);
868 shamlog_debug_sycl_ln(
"deriv kernel",
"alpha_u :", alpha_u);
869 shamlog_debug_ln(
"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
"");
873 constexpr Tscal Rker2 = Kernel::Rkern * Kernel::Rkern;
875 shambase::parallel_for(cgh, pdat.get_obj_cnt(),
"compute MHD", [=](
u64 gid) {
876 u32 id_a = (u32) gid;
878 using namespace shamrock::sph;
880 Tvec sum_axyz = {0, 0, 0};
883 Tscal h_a =
hpart[id_a];
884 Tvec xyz_a =
xyz[id_a];
885 Tvec vxyz_a =
vxyz[id_a];
887 Tscal cs_a = cs[id_a];
888 Tscal omega_a =
omega[id_a];
889 const Tscal u_a = u[id_a];
891 Tscal rho_a = rho_h(pmass, h_a, Kernel::hfactd);
892 Tscal rho_a_sq = rho_a * rho_a;
893 Tscal rho_a_inv = 1. / rho_a;
895 Tvec B_a = B_on_rho[id_a] * rho_a;
896 Tscal v_alfven_a = sycl::sqrt(sycl::dot(B_a, B_a) / (mu_0 * rho_a));
897 Tscal v_shock_a = sycl::sqrt(cs_a * cs_a + v_alfven_a * v_alfven_a);
898 Tscal psi_a = psi_on_ch[id_a] * v_shock_a;
900 Tscal omega_a_rho_a_inv = 1 / (omega_a * rho_a);
902 Tvec force_pressure{0, 0, 0};
903 Tscal tmpdU_pressure = 0;
904 Tvec magnetic_eq{0, 0, 0};
908 Tvec mag_pressure_term{0, 0, 0};
909 Tvec mag_tension_term{0, 0, 0};
910 Tvec gas_pressure_term{0, 0, 0};
911 Tvec tensile_corr_term{0, 0, 0};
913 Tscal psi_propag_term = 0;
914 Tscal psi_diff_term = 0;
915 Tscal psi_cons_term = 0;
917 Tscal u_mhd_term = 0;
919 particle_looper.for_each_object(id_a, [&](
u32 id_b) {
921 Tvec dr = xyz_a -
xyz[id_b];
922 Tscal rab2 = sycl::dot(dr, dr);
923 Tscal h_b =
hpart[id_b];
925 if (rab2 > h_a * h_a * Rker2 && rab2 > h_b * h_b * Rker2) {
929 Tvec vxyz_b =
vxyz[id_b];
930 const Tscal u_b = u[id_b];
932 Tscal omega_b =
omega[id_b];
933 Tscal cs_b = cs[id_b];
935 Tscal rab = sycl::sqrt(rab2);
937 Tscal rho_b = rho_h(pmass, h_b, Kernel::hfactd);
938 Tvec B_b = B_on_rho[id_b] * rho_b;
939 Tscal v_alfven_b = sycl::sqrt(sycl::dot(B_b, B_b) / (mu_0 * rho_b));
940 Tscal v_shock_b = sycl::sqrt(cs_b * cs_b + v_alfven_b * v_alfven_b);
941 Tscal psi_b = psi_on_ch[id_b] * v_shock_b;
944 Tscal Fab_a = Kernel::dW_3d(rab, h_a);
945 Tscal Fab_b = Kernel::dW_3d(rab, h_b);
948 shamrock::sph::mhd::add_to_derivs_spmhd<Kernel, Tvec, Tscal>(
999 axyz[id_a] = force_pressure;
1000 du[id_a] = tmpdU_pressure;
1001 dB_on_rho[id_a] = magnetic_eq;
1002 dpsi_on_ch[id_a] = psi_eq - psi_a / h_a;
1003 drho_dt[id_a] = drho_eq;
1006 mag_pressure[id_a] = mag_pressure_term;
1007 mag_tension[id_a] = mag_tension_term;
1008 gas_pressure[id_a] = gas_pressure_term;
1009 tensile_corr[id_a] = tensile_corr_term;
1011 psi_propag[id_a] = psi_propag_term;
1012 psi_diff[id_a] = psi_diff_term;
1013 psi_cons[id_a] = -psi_a / h_a;
1015 u_mhd[id_a] = u_mhd_term;
1022 buf_duint.complete_event_state(e);
1023 buf_vxyz.complete_event_state(e);
1024 buf_hpart.complete_event_state(e);
1025 buf_omega.complete_event_state(e);
1026 buf_uint.complete_event_state(e);
1027 buf_pressure.complete_event_state(e);
1029 buf_B_on_rho.complete_event_state(e);
1030 buf_psi_on_ch.complete_event_state(e);
1032 buf_dpsi_on_ch.complete_event_state(e);
1033 buf_drho_dt.complete_event_state(e);
1036 pdat.get_field_buf_ref<Tvec>(imag_pressure).complete_event_state(e);
1037 pdat.get_field_buf_ref<Tvec>(imag_tension).complete_event_state(e);
1038 pdat.get_field_buf_ref<Tvec>(igas_pressure).complete_event_state(e);
1039 pdat.get_field_buf_ref<Tvec>(itensile_corr).complete_event_state(e);
1041 pdat.get_field_buf_ref<Tscal>(ipsi_propag).complete_event_state(e);
1042 pdat.get_field_buf_ref<Tscal>(ipsi_diff).complete_event_state(e);
1043 pdat.get_field_buf_ref<Tscal>(ipsi_cons).complete_event_state(e);
1045 pdat.get_field_buf_ref<Tscal>(iu_mhd).complete_event_state(e);
1050 pcache.complete_event_state(resulting_events);
constexpr const char * axyz
3-acceleration field
constexpr const char * vxyz
3-velocity field
constexpr const char * part_counts_with_ghost
Particle counts including ghosts.
constexpr const char * xyz
Position field (3D coordinates)
constexpr const char * part_counts
Particle counts per patch.
constexpr const char * pressure
Pressure P (derived from EOS)
constexpr const char * hpart
Smoothing length field.
constexpr const char * omega
Grad-h correction factor \Omega.
std::uint32_t u32
32 bit unsigned integer
std::uint64_t u64
64 bit unsigned integer
A buffer allocated in USM (Unified Shared Memory)
void complete_event_state(sycl::event e) const
Complete the event state of the buffer.
T * get_write_access(sham::EventList &depends_list, SourceLocation src_loc=SourceLocation{})
Get a read-write pointer to the buffer's data.
const T * get_read_access(sham::EventList &depends_list, SourceLocation src_loc=SourceLocation{}) const
Get a read-only pointer to the buffer's data.
A SYCL queue associated with a device and a context.
sycl::event submit(Fct &&fct)
Submits a kernel to the SYCL queue.
DeviceQueue & get_queue(u32 id=0)
Get a reference to a DeviceQueue.
Class to manage a list of SYCL events.
void add_event(sycl::event e)
Add an event to the list of events.
Represents a collection of objects distributed across patches identified by a u64 id.
DistributedData< Tmap > map(std::function< Tmap(u64, T &)> map_func)
Apply a function to all objects in the collection and return a new collection containing the results.
T & get(u64 id)
Returns a reference to an object in the collection.
u32 get_field_idx(const std::string &field_name) const
Get the field id if matching name & type.
PatchDataLayer container class, the layout is described in patchdata_layout.
A graph container for managing solver nodes and edges with type-safe access.
std::shared_ptr< T > get_edge_ptr(const std::string &name)
Get a typed shared pointer to an edge by name.
T inv_sat_positive(T v, T minvsat=T{1e-9}, T satval=T{0.}) noexcept
inverse saturated (positive numbers only)
T & get_check_ref(const std::unique_ptr< T > &ptr, SourceLocation loc=SourceLocation())
Takes a std::unique_ptr and returns a reference to the object it holds. It throws a std::runtime_erro...
void throw_unimplemented(SourceLocation loc=SourceLocation{})
Throw a std::runtime_error saying that the function is unimplemented.
namespace for math utility
namespace for the main framework
constexpr Tscal q_av(const Tscal &rho, const Tscal &vsig, const Tscal &v_scal_rhat)
eq.40
file containing formulas for sphmhd forces, evolution of magnetic and divergence cleaning fields.
file containing formulas for sph forces
Patch object that contain generic patch information.
u64 id_patch
unique key that identify the patch