From b4970ff136be4a18a43046a32fa4706e5ae707de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20David--Cl=C3=A9ris?= Date: Fri, 9 Jan 2026 21:49:57 +0100 Subject: [PATCH 01/15] [Patch] Move LayerLayout to new PatchDataLayout class --- .../shammodels/common/setup/modifiers.hpp | 14 +-- .../gsph/include/shammodels/gsph/Model.hpp | 14 +-- .../gsph/include/shammodels/gsph/Solver.hpp | 2 +- src/shammodels/gsph/src/Model.cpp | 12 +-- src/shammodels/gsph/src/Solver.cpp | 16 +-- .../gsph/src/modules/UpdateDerivs.cpp | 4 +- .../gsph/src/modules/io/VTKDump.cpp | 2 +- .../nbody/src/models/nbody_selfgrav.cpp | 16 +-- .../nbody/src/setup/nbody_setup.cpp | 4 +- .../include/shammodels/ramses/Model.hpp | 2 +- src/shammodels/ramses/src/Model.cpp | 2 +- src/shammodels/ramses/src/Solver.cpp | 2 +- .../ramses/src/modules/AMRSetup.cpp | 2 +- .../ramses/src/modules/AnalysisSodTube.cpp | 2 +- .../ramses/src/modules/ComputeCFL.cpp | 4 +- .../ramses/src/modules/DragIntegrator.cpp | 6 +- .../ramses/src/modules/TimeIntegrator.cpp | 2 +- .../include/shammodels/sph/BasicSPHGhosts.hpp | 4 +- .../sph/include/shammodels/sph/Model.hpp | 44 ++++----- .../include/shammodels/sph/SPHUtilities.hpp | 2 +- .../sph/include/shammodels/sph/Solver.hpp | 2 +- .../sph/modules/AnalysisBarycenter.hpp | 2 +- .../sph/modules/AnalysisEnergyKinetic.hpp | 2 +- .../sph/modules/AnalysisEnergyPotential.hpp | 2 +- .../sph/modules/AnalysisTotalMomentum.hpp | 2 +- .../modules/setup/GeneratorLatticeCubic.hpp | 6 +- .../sph/modules/setup/GeneratorLatticeHCP.hpp | 6 +- src/shammodels/sph/src/Model.cpp | 52 +++++----- src/shammodels/sph/src/Solver.cpp | 18 ++-- .../sph/src/modules/AnalysisDisc.cpp | 4 +- .../sph/src/modules/AnalysisSodTube.cpp | 2 +- .../sph/src/modules/ConservativeCheck.cpp | 2 +- .../sph/src/modules/DiffOperator.cpp | 4 +- .../sph/src/modules/DiffOperatorDtDivv.cpp | 2 +- .../sph/src/modules/ExternalForces.cpp | 6 +- src/shammodels/sph/src/modules/SPHSetup.cpp | 6 +- .../sph/src/modules/SinkParticlesUpdate.cpp | 4 +- .../sph/src/modules/UpdateDerivs.cpp | 10 +- .../sph/src/modules/UpdateViscosity.cpp | 4 +- src/shammodels/sph/src/modules/io/VTKDump.cpp | 2 +- .../sph/src/modules/setup/GeneratorMCDisc.cpp | 10 +- .../modules/setup/ModifierApplyCustomWarp.cpp | 2 +- .../modules/setup/ModifierApplyDiscWarp.cpp | 2 +- .../sph/src/modules/setup/ModifierFilter.cpp | 4 +- .../sph/src/modules/setup/ModifierOffset.cpp | 4 +- .../zeus/include/shammodels/zeus/Model.hpp | 2 +- .../zeus/src/modules/AnalysisSodTube.cpp | 2 +- .../zeus/src/modules/GhostZones.cpp | 2 +- src/shampylib/src/pyShamrockCtx.cpp | 2 +- src/shamrock/include/shamrock/amr/AMRGrid.hpp | 12 +-- .../include/shamrock/legacy/io/dump.hpp | 4 +- .../legacy/patch/comm/patch_object_mover.hpp | 24 ++--- .../interfaces/interface_handler_impl.hpp | 4 +- .../interface_handler_impl_tree.hpp | 2 +- .../shamrock/patch/PatchDataLayout.hpp | 99 +++++++++++++++++++ .../shamrock/scheduler/PatchScheduler.hpp | 34 +++++-- .../scheduler/ReattributeDataUtility.hpp | 8 +- .../shamrock/scheduler/ShamrockCtx.hpp | 23 +++-- src/shamrock/src/io/ShamrockDump.cpp | 4 +- .../src/legacy/patch/utility/merged_patch.cpp | 2 +- src/shamrock/src/scheduler/PatchScheduler.cpp | 42 ++++---- src/tests/benchmark_selfgrav.cpp | 6 +- src/tests/shamrock_article_1Tests.cpp | 4 +- 63 files changed, 358 insertions(+), 234 deletions(-) create mode 100644 src/shamrock/include/shamrock/patch/PatchDataLayout.hpp diff --git a/src/shammodels/common/include/shammodels/common/setup/modifiers.hpp b/src/shammodels/common/include/shammodels/common/setup/modifiers.hpp index f39e70e171..66a6974b97 100644 --- a/src/shammodels/common/include/shammodels/common/setup/modifiers.hpp +++ b/src/shammodels/common/include/shammodels/common/setup/modifiers.hpp @@ -34,9 +34,9 @@ namespace generic::setup::modifiers { sched.patch_data.for_each_patchdata([&](u64 patch_id, shamrock::patch::PatchDataLayer &pdat) { PatchDataField &xyz - = pdat.template get_field(sched.pdl().get_field_idx("xyz")); + = pdat.template get_field(sched.pdl_old().get_field_idx("xyz")); - PatchDataField &f = pdat.template get_field(sched.pdl().get_field_idx(name)); + PatchDataField &f = pdat.template get_field(sched.pdl_old().get_field_idx(name)); { auto &buf = f.get_buf(); @@ -70,9 +70,9 @@ namespace generic::setup::modifiers { sched.patch_data.for_each_patchdata([&](u64 patch_id, shamrock::patch::PatchDataLayer &pdat) { PatchDataField &xyz - = pdat.template get_field(sched.pdl().get_field_idx("xyz")); + = pdat.template get_field(sched.pdl_old().get_field_idx("xyz")); - PatchDataField &f = pdat.template get_field(sched.pdl().get_field_idx(name)); + PatchDataField &f = pdat.template get_field(sched.pdl_old().get_field_idx(name)); flt r2 = radius * radius; { @@ -107,9 +107,9 @@ namespace generic::setup::modifiers { sched.patch_data.for_each_patchdata( [&](u64 patch_id, shamrock::patch::PatchDataLayer &pdat) { PatchDataField &xyz - = pdat.template get_field(sched.pdl().get_field_idx("xyz")); + = pdat.template get_field(sched.pdl_old().get_field_idx("xyz")); PatchDataField &vxyz - = pdat.template get_field(sched.pdl().get_field_idx("vxyz")); + = pdat.template get_field(sched.pdl_old().get_field_idx("vxyz")); flt ampl = std::get<1>(ampls); @@ -143,7 +143,7 @@ namespace generic::setup::modifiers { StackEntry stack_loc{}; sched.patch_data.for_each_patchdata([&](u64 patch_id, shamrock::patch::PatchDataLayer &pdat) { - PatchDataField &xyz = pdat.template get_field(sched.pdl().get_field_idx(name)); + PatchDataField &xyz = pdat.template get_field(sched.pdl_old().get_field_idx(name)); sum += xyz.compute_sum(); }); diff --git a/src/shammodels/gsph/include/shammodels/gsph/Model.hpp b/src/shammodels/gsph/include/shammodels/gsph/Model.hpp index 29c6ab2866..4147bb2123 100644 --- a/src/shammodels/gsph/include/shammodels/gsph/Model.hpp +++ b/src/shammodels/gsph/include/shammodels/gsph/Model.hpp @@ -154,10 +154,10 @@ namespace shammodels::gsph { sched.patch_data.for_each_patchdata( [&](u64 patch_id, shamrock::patch::PatchDataLayer &pdat) { PatchDataField &xyz - = pdat.template get_field(sched.pdl().get_field_idx("xyz")); + = pdat.template get_field(sched.pdl_old().get_field_idx("xyz")); PatchDataField &f - = pdat.template get_field(sched.pdl().get_field_idx(field_name)); + = pdat.template get_field(sched.pdl_old().get_field_idx(field_name)); if (f.get_nvar() != 1) { shambase::throw_unimplemented(); @@ -210,10 +210,10 @@ namespace shammodels::gsph { sched.patch_data.for_each_patchdata( [&](u64 patch_id, shamrock::patch::PatchDataLayer &pdat) { PatchDataField &xyz - = pdat.template get_field(sched.pdl().get_field_idx("xyz")); + = pdat.template get_field(sched.pdl_old().get_field_idx("xyz")); PatchDataField &f - = pdat.template get_field(sched.pdl().get_field_idx(field_name)); + = pdat.template get_field(sched.pdl_old().get_field_idx(field_name)); u32 nvar = f.get_nvar(); @@ -268,10 +268,10 @@ namespace shammodels::gsph { sched.patch_data.for_each_patchdata( [&](u64 patch_id, shamrock::patch::PatchDataLayer &pdat) { PatchDataField &xyz - = pdat.template get_field(sched.pdl().get_field_idx("xyz")); + = pdat.template get_field(sched.pdl_old().get_field_idx("xyz")); PatchDataField &f - = pdat.template get_field(sched.pdl().get_field_idx(field_name)); + = pdat.template get_field(sched.pdl_old().get_field_idx(field_name)); if (f.get_nvar() != 1) { shambase::throw_unimplemented(); @@ -302,7 +302,7 @@ namespace shammodels::gsph { sched.patch_data.for_each_patchdata( [&](u64 patch_id, shamrock::patch::PatchDataLayer &pdat) { PatchDataField &xyz - = pdat.template get_field(sched.pdl().get_field_idx(name)); + = pdat.template get_field(sched.pdl_old().get_field_idx(name)); sum += xyz.compute_sum(); }); diff --git a/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp b/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp index a688c76fa6..c32212caa9 100644 --- a/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp +++ b/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp @@ -86,7 +86,7 @@ namespace shammodels::gsph { Config solver_config; sph::SolverLog solve_logs; - inline void init_required_fields() { solver_config.set_layout(context.get_pdl_write()); } + inline void init_required_fields() { solver_config.set_layout(context.get_pdl_write().get_layer_ref()); } // Serial patch tree control void gen_serial_patch_tree(); diff --git a/src/shammodels/gsph/src/Model.cpp b/src/shammodels/gsph/src/Model.cpp index 2d1961dd21..9ea25397da 100644 --- a/src/shammodels/gsph/src/Model.cpp +++ b/src/shammodels/gsph/src/Model.cpp @@ -160,21 +160,21 @@ void shammodels::gsph::Model::add_cube_fcc_3d( patch_coord.lower, patch_coord.upper); - PatchDataLayer tmp(sched.get_layout_ptr()); + PatchDataLayer tmp(sched.get_layout_ptr_old()); tmp.resize(vec_acc.size()); tmp.fields_raz(); { u32 len = vec_acc.size(); PatchDataField &f - = tmp.template get_field(sched.pdl().template get_field_idx("xyz")); + = tmp.template get_field(sched.pdl_old().template get_field_idx("xyz")); sycl::buffer buf(vec_acc.data(), len); f.override(buf, len); } { PatchDataField &f = tmp.template get_field( - sched.pdl().template get_field_idx("hpart")); + sched.pdl_old().template get_field_idx("hpart")); using Kernel = SPHKernel; f.override(Kernel::hfactd * dr); } @@ -269,21 +269,21 @@ void shammodels::gsph::Model::add_cube_hcp_3d( patch_coord.lower, patch_coord.upper); - PatchDataLayer tmp(sched.get_layout_ptr()); + PatchDataLayer tmp(sched.get_layout_ptr_old()); tmp.resize(vec_acc.size()); tmp.fields_raz(); { u32 len = vec_acc.size(); PatchDataField &f - = tmp.template get_field(sched.pdl().template get_field_idx("xyz")); + = tmp.template get_field(sched.pdl_old().template get_field_idx("xyz")); sycl::buffer buf(vec_acc.data(), len); f.override(buf, len); } { PatchDataField &f = tmp.template get_field( - sched.pdl().template get_field_idx("hpart")); + sched.pdl_old().template get_field_idx("hpart")); using Kernel = SPHKernel; f.override(Kernel::hfactd * dr); } diff --git a/src/shammodels/gsph/src/Solver.cpp b/src/shammodels/gsph/src/Solver.cpp index 9837e4c171..67f5bbaaa7 100644 --- a/src/shammodels/gsph/src/Solver.cpp +++ b/src/shammodels/gsph/src/Solver.cpp @@ -496,7 +496,7 @@ void shammodels::gsph::Solver::apply_position_boundary(Tscal time_va shamrock::SchedulerUtility integrators(sched); shamrock::ReattributeDataUtility reatrib(sched); - auto &pdl = sched.pdl(); + auto &pdl = sched.pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); auto [bmin, bmax] = sched.get_box_volume(); @@ -538,7 +538,7 @@ void shammodels::gsph::Solver::do_predictor_leapfrog(Tscal dt) { StackEntry stack_loc{}; using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); const u32 iaxyz = pdl.get_field_idx("axyz"); @@ -623,7 +623,7 @@ void shammodels::gsph::Solver::communicate_merge_ghosts_fields() { using namespace shamrock; using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); const u32 ihpart = pdl.get_field_idx("hpart"); @@ -821,7 +821,7 @@ void shammodels::gsph::Solver::compute_omega() { density_field.ensure_sizes(sizes->indexes); // Get patchdata layout for hpart field - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ihpart = pdl.get_field_idx("hpart"); // ========================================================================= @@ -1196,7 +1196,7 @@ void shammodels::gsph::Solver::compute_gradients() { auto dev_sched = shamsys::instance::get_compute_scheduler_ptr(); - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ihpart = pdl.get_field_idx("hpart"); const u32 ivxyz = pdl.get_field_idx("vxyz"); const bool has_uint = solver_config.has_field_uint(); @@ -1367,7 +1367,7 @@ void shammodels::gsph::Solver::prepare_corrector() { StackEntry stack_loc{}; shamrock::SchedulerUtility utility(scheduler()); - shamrock::patch::PatchDataLayerLayout &pdl = scheduler().pdl(); + shamrock::patch::PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 iaxyz = pdl.get_field_idx("axyz"); @@ -1444,7 +1444,7 @@ typename shammodels::gsph::Solver::Tscal shammodels::gsph::Solver("hpart"); const u32 iaxyz = pdl.get_field_idx("axyz"); @@ -1542,7 +1542,7 @@ template class Kern> bool shammodels::gsph::Solver::apply_corrector(Tscal dt, u64 Npart_all) { StackEntry stack_loc{}; - shamrock::patch::PatchDataLayerLayout &pdl = scheduler().pdl(); + shamrock::patch::PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ivxyz = pdl.get_field_idx("vxyz"); const u32 iaxyz = pdl.get_field_idx("axyz"); diff --git a/src/shammodels/gsph/src/modules/UpdateDerivs.cpp b/src/shammodels/gsph/src/modules/UpdateDerivs.cpp index a5f8dfc5fd..b397fda95d 100644 --- a/src/shammodels/gsph/src/modules/UpdateDerivs.cpp +++ b/src/shammodels/gsph/src/modules/UpdateDerivs.cpp @@ -59,7 +59,7 @@ void shammodels::gsph::modules::UpdateDerivs::update_derivs_ite using namespace shamrock; using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); // Get field indices from the patch data layout const u32 ixyz = pdl.get_field_idx("xyz"); @@ -276,7 +276,7 @@ void shammodels::gsph::modules::UpdateDerivs::update_derivs_hll using namespace shamrock; using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); // Get field indices const u32 ixyz = pdl.get_field_idx("xyz"); diff --git a/src/shammodels/gsph/src/modules/io/VTKDump.cpp b/src/shammodels/gsph/src/modules/io/VTKDump.cpp index 1f3efbfac8..eed518245f 100644 --- a/src/shammodels/gsph/src/modules/io/VTKDump.cpp +++ b/src/shammodels/gsph/src/modules/io/VTKDump.cpp @@ -158,7 +158,7 @@ namespace shammodels::gsph::modules { using namespace shamrock::patch; shamrock::SchedulerUtility utility(scheduler()); - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); const u32 iaxyz = pdl.get_field_idx("axyz"); diff --git a/src/shammodels/nbody/src/models/nbody_selfgrav.cpp b/src/shammodels/nbody/src/models/nbody_selfgrav.cpp index 9c4b046cc5..3164aa0a6d 100644 --- a/src/shammodels/nbody/src/models/nbody_selfgrav.cpp +++ b/src/shammodels/nbody/src/models/nbody_selfgrav.cpp @@ -374,10 +374,10 @@ f64 models::nbody::Nbody_SelfGrav::evolve( // Stepper stepper(sched,periodic_bc,htol_up_tol,htol_up_iter,gpart_mass); - const u32 ixyz = sched.pdl().get_field_idx("xyz"); - const u32 ivxyz = sched.pdl().get_field_idx("vxyz"); - const u32 iaxyz = sched.pdl().get_field_idx("axyz"); - const u32 iaxyz_old = sched.pdl().get_field_idx("axyz_old"); + const u32 ixyz = sched.pdl_old().get_field_idx("xyz"); + const u32 ivxyz = sched.pdl_old().get_field_idx("vxyz"); + const u32 iaxyz = sched.pdl_old().get_field_idx("axyz"); + const u32 iaxyz_old = sched.pdl_old().get_field_idx("axyz_old"); // const u32 ihpart = sched.pdl.get_field_idx("hpart"); @@ -446,10 +446,10 @@ f64 models::nbody::Nbody_SelfGrav::evolve( }; auto leapfrog_lambda = [&](flt old_time, bool do_force, bool do_corrector) -> flt { - const u32 ixyz = sched.pdl().get_field_idx("xyz"); - const u32 ivxyz = sched.pdl().get_field_idx("vxyz"); - const u32 iaxyz = sched.pdl().get_field_idx("axyz"); - const u32 iaxyz_old = sched.pdl().get_field_idx("axyz_old"); + const u32 ixyz = sched.pdl_old().get_field_idx("xyz"); + const u32 ivxyz = sched.pdl_old().get_field_idx("vxyz"); + const u32 iaxyz = sched.pdl_old().get_field_idx("axyz"); + const u32 iaxyz_old = sched.pdl_old().get_field_idx("axyz_old"); logger::info_ln( "NBodyleapfrog", diff --git a/src/shammodels/nbody/src/setup/nbody_setup.cpp b/src/shammodels/nbody/src/setup/nbody_setup.cpp index 24693f0924..c42926f242 100644 --- a/src/shammodels/nbody/src/setup/nbody_setup.cpp +++ b/src/shammodels/nbody/src/setup/nbody_setup.cpp @@ -54,14 +54,14 @@ void models::nbody::NBodySetup::add_particules_fcc( std::cout << ">>> adding : " << vec_acc.size() << " objects" << std::endl; - PatchDataLayer tmp(sched.get_layout_ptr()); + PatchDataLayer tmp(sched.get_layout_ptr_old()); tmp.resize(vec_acc.size()); part_cnt += vec_acc.size(); { u32 len = vec_acc.size(); - PatchDataField &f = tmp.get_field(sched.pdl().get_field_idx("xyz")); + PatchDataField &f = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); sycl::buffer buf(vec_acc.data(), len); f.override(buf, len); } diff --git a/src/shammodels/ramses/include/shammodels/ramses/Model.hpp b/src/shammodels/ramses/include/shammodels/ramses/Model.hpp index 89e4a46873..0026c11b55 100644 --- a/src/shammodels/ramses/include/shammodels/ramses/Model.hpp +++ b/src/shammodels/ramses/include/shammodels/ramses/Model.hpp @@ -69,7 +69,7 @@ namespace shammodels::basegodunov { sham::DeviceBuffer &buf_cell_max = pdat.get_field_buf_ref(1); PatchDataField &f - = pdat.template get_field(sched.pdl().get_field_idx(field_name)); + = pdat.template get_field(sched.pdl_old().get_field_idx(field_name)); auto acc = f.get_buf().copy_to_stdvec(); diff --git a/src/shammodels/ramses/src/Model.cpp b/src/shammodels/ramses/src/Model.cpp index 596fd077e9..65f7d9f103 100644 --- a/src/shammodels/ramses/src/Model.cpp +++ b/src/shammodels/ramses/src/Model.cpp @@ -164,7 +164,7 @@ void shammodels::basegodunov::Model::dump_vtk(std::string filena if (solver.solver_config.is_dust_on()) { u32 ndust = solver.solver_config.dust_config.ndust; - shamrock::patch::PatchDataLayerLayout &pdl = solver.scheduler().pdl(); + shamrock::patch::PatchDataLayerLayout &pdl = solver.scheduler().pdl_old(); const u32 irho_dust = pdl.get_field_idx("rho_dust"); const u32 irhovel_dust = pdl.get_field_idx("rhovel_dust"); diff --git a/src/shammodels/ramses/src/Solver.cpp b/src/shammodels/ramses/src/Solver.cpp index 49cb975f34..0de0cf860d 100644 --- a/src/shammodels/ramses/src/Solver.cpp +++ b/src/shammodels/ramses/src/Solver.cpp @@ -729,7 +729,7 @@ void shammodels::basegodunov::Solver::init_solver_graph() { auto &ghost_layout_ptr = storage.ghost_layout; { auto copy_fields = std::make_shared( - scheduler().get_layout_ptr(), ghost_layout_ptr); + scheduler().get_layout_ptr_old(), ghost_layout_ptr); copy_fields->set_edges(storage.source_patches, storage.merged_patchdata_ghost); gz_xchg_sequence.push_back(std::move(copy_fields)); diff --git a/src/shammodels/ramses/src/modules/AMRSetup.cpp b/src/shammodels/ramses/src/modules/AMRSetup.cpp index 320df11b22..cee2f18e37 100644 --- a/src/shammodels/ramses/src/modules/AMRSetup.cpp +++ b/src/shammodels/ramses/src/modules/AMRSetup.cpp @@ -179,7 +179,7 @@ void shammodels::basegodunov::modules::AMRSetup::make_base_grid( } // Make a patchdata from pos_data - shamrock::patch::PatchDataLayer tmp(sched.get_layout_ptr()); + shamrock::patch::PatchDataLayer tmp(sched.get_layout_ptr_old()); if (!tmp_out.empty()) { tmp.resize(tmp_out.size()); tmp.fields_raz(); diff --git a/src/shammodels/ramses/src/modules/AnalysisSodTube.cpp b/src/shammodels/ramses/src/modules/AnalysisSodTube.cpp index f8cdb00223..f56cc93e03 100644 --- a/src/shammodels/ramses/src/modules/AnalysisSodTube.cpp +++ b/src/shammodels/ramses/src/modules/AnalysisSodTube.cpp @@ -40,7 +40,7 @@ auto shammodels::basegodunov::modules::AnalysisSodTube::compute_ using namespace shammath; // load layout info - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 icell_min = pdl.get_field_idx("cell_min"); const u32 icell_max = pdl.get_field_idx("cell_max"); diff --git a/src/shammodels/ramses/src/modules/ComputeCFL.cpp b/src/shammodels/ramses/src/modules/ComputeCFL.cpp index bba4c983e1..954973210a 100644 --- a/src/shammodels/ramses/src/modules/ComputeCFL.cpp +++ b/src/shammodels/ramses/src/modules/ComputeCFL.cpp @@ -33,7 +33,7 @@ auto shammodels::basegodunov::modules::ComputeCFL::compute_cfl() ComputeField cfl_dt = utility.make_compute_field("cfl_dt", AMRBlock::block_size); // load layout info - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 icell_min = pdl.get_field_idx("cell_min"); const u32 icell_max = pdl.get_field_idx("cell_max"); @@ -140,7 +140,7 @@ auto shammodels::basegodunov::modules::ComputeCFL::compute_dust_ = utility.make_compute_field("dust_cfl_dt", ndust * AMRBlock::block_size); // load layout info - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 icell_min = pdl.get_field_idx("cell_min"); const u32 icell_max = pdl.get_field_idx("cell_max"); diff --git a/src/shammodels/ramses/src/modules/DragIntegrator.cpp b/src/shammodels/ramses/src/modules/DragIntegrator.cpp index ec5120e0f0..de8e0ff635 100644 --- a/src/shammodels/ramses/src/modules/DragIntegrator.cpp +++ b/src/shammodels/ramses/src/modules/DragIntegrator.cpp @@ -58,7 +58,7 @@ void shammodels::basegodunov::modules::DragIntegrator::involve_w = shambase::get_check_ref(storage.dtrhov_dust); // load layout info - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 icell_min = pdl.get_field_idx("cell_min"); const u32 icell_max = pdl.get_field_idx("cell_max"); @@ -181,7 +181,7 @@ void shammodels::basegodunov::modules::DragIntegrator::enable_ir shamrock::ComputeField &cfield_rhov_d_new = storage.rhov_d_next_no_drag.get(); // load layout info - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 icell_min = pdl.get_field_idx("cell_min"); const u32 icell_max = pdl.get_field_idx("cell_max"); @@ -338,7 +338,7 @@ void shammodels::basegodunov::modules::DragIntegrator::enable_ex shamrock::ComputeField &cfield_rhov_d_new = storage.rhov_d_next_no_drag.get(); // load layout info - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 icell_min = pdl.get_field_idx("cell_min"); const u32 icell_max = pdl.get_field_idx("cell_max"); diff --git a/src/shammodels/ramses/src/modules/TimeIntegrator.cpp b/src/shammodels/ramses/src/modules/TimeIntegrator.cpp index 184f19ebe4..ad605eff03 100644 --- a/src/shammodels/ramses/src/modules/TimeIntegrator.cpp +++ b/src/shammodels/ramses/src/modules/TimeIntegrator.cpp @@ -29,7 +29,7 @@ void shammodels::basegodunov::modules::TimeIntegrator::forward_e shamrock::solvergraph::Field &cfield_dtrhoe = shambase::get_check_ref(storage.dtrhoe); // load layout info - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 icell_min = pdl.get_field_idx("cell_min"); const u32 icell_max = pdl.get_field_idx("cell_max"); diff --git a/src/shammodels/sph/include/shammodels/sph/BasicSPHGhosts.hpp b/src/shammodels/sph/include/shammodels/sph/BasicSPHGhosts.hpp index c282919782..fafa9492cb 100644 --- a/src/shammodels/sph/include/shammodels/sph/BasicSPHGhosts.hpp +++ b/src/shammodels/sph/include/shammodels/sph/BasicSPHGhosts.hpp @@ -290,7 +290,7 @@ namespace shammodels::sph { build_position_interf_field(shambase::DistributedDataShared &builder) { StackEntry stack_loc{}; - const u32 ihpart = sched.pdl().template get_field_idx("hpart"); + const u32 ihpart = sched.pdl_old().template get_field_idx("hpart"); return build_interface_native( builder, @@ -457,7 +457,7 @@ namespace shammodels::sph { shambase::DistributedDataShared &&positioninterfs) { StackEntry stack_loc{}; - const u32 ihpart = sched.pdl().template get_field_idx("hpart"); + const u32 ihpart = sched.pdl_old().template get_field_idx("hpart"); return merge_native( std::forward>( diff --git a/src/shammodels/sph/include/shammodels/sph/Model.hpp b/src/shammodels/sph/include/shammodels/sph/Model.hpp index 6ba8cea82d..64d367a94c 100644 --- a/src/shammodels/sph/include/shammodels/sph/Model.hpp +++ b/src/shammodels/sph/include/shammodels/sph/Model.hpp @@ -184,10 +184,10 @@ namespace shammodels::sph { sched.patch_data.for_each_patchdata( [&](u64 patch_id, shamrock::patch::PatchDataLayer &pdat) { PatchDataField &xyz - = pdat.template get_field(sched.pdl().get_field_idx("xyz")); + = pdat.template get_field(sched.pdl_old().get_field_idx("xyz")); PatchDataField &f - = pdat.template get_field(sched.pdl().get_field_idx(field_name)); + = pdat.template get_field(sched.pdl_old().get_field_idx(field_name)); if (f.get_nvar() != 1) { shambase::throw_unimplemented(); @@ -333,14 +333,14 @@ namespace shammodels::sph { log += shambase::format( "\n patch id={}, add N={} particles", ptch.id_patch, vec_pos.size()); - PatchDataLayer tmp(sched.get_layout_ptr()); + PatchDataLayer tmp(sched.get_layout_ptr_old()); tmp.resize(vec_pos.size()); tmp.fields_raz(); { u32 len = vec_pos.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("xyz")); + = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); sycl::buffer buf(vec_pos.data(), len); f.override(buf, len); } @@ -348,7 +348,7 @@ namespace shammodels::sph { { u32 len = vec_pos.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("hpart")); + = tmp.get_field(sched.pdl_old().get_field_idx("hpart")); sycl::buffer buf(vec_h.data(), len); f.override(buf, len); } @@ -356,7 +356,7 @@ namespace shammodels::sph { { u32 len = vec_pos.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("uint")); + = tmp.get_field(sched.pdl_old().get_field_idx("uint")); sycl::buffer buf(vec_u.data(), len); f.override(buf, len); } @@ -364,7 +364,7 @@ namespace shammodels::sph { if (solver.solver_config.is_eos_locally_isothermal()) { u32 len = vec_pos.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("soundspeed")); + = tmp.get_field(sched.pdl_old().get_field_idx("soundspeed")); sycl::buffer buf(vec_cs.data(), len); f.override(buf, len); } @@ -372,7 +372,7 @@ namespace shammodels::sph { { u32 len = vec_pos.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("vxyz")); + = tmp.get_field(sched.pdl_old().get_field_idx("vxyz")); sycl::buffer buf(vec_vel.data(), len); f.override(buf, len); } @@ -499,28 +499,28 @@ namespace shammodels::sph { log += shambase::format( "\n patch id={}, add N={} particles", ptch.id_patch, vec_acc.size()); - PatchDataLayer tmp(sched.get_layout_ptr()); + PatchDataLayer tmp(sched.get_layout_ptr_old()); tmp.resize(vec_acc.size()); tmp.fields_raz(); { u32 len = vec_acc.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("xyz")); + = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); sycl::buffer buf(vec_acc.data(), len); f.override(buf, len); } { PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("hpart")); + = tmp.get_field(sched.pdl_old().get_field_idx("hpart")); f.override(0.01); } { u32 len = vec_acc.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("uint")); + = tmp.get_field(sched.pdl_old().get_field_idx("uint")); sycl::buffer buf(vec_u.data(), len); f.override(buf, len); } @@ -528,7 +528,7 @@ namespace shammodels::sph { { u32 len = vec_acc.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("vxyz")); + = tmp.get_field(sched.pdl_old().get_field_idx("vxyz")); sycl::buffer buf(vec_vel.data(), len); f.override(buf, len); } @@ -604,10 +604,10 @@ namespace shammodels::sph { sched.patch_data.for_each_patchdata( [&](u64 patch_id, shamrock::patch::PatchDataLayer &pdat) { PatchDataField &xyz - = pdat.template get_field(sched.pdl().get_field_idx("xyz")); + = pdat.template get_field(sched.pdl_old().get_field_idx("xyz")); PatchDataField &f - = pdat.template get_field(sched.pdl().get_field_idx(field_name)); + = pdat.template get_field(sched.pdl_old().get_field_idx(field_name)); if (ivar >= f.get_nvar()) { shambase::throw_with_loc(shambase::format( @@ -642,10 +642,10 @@ namespace shammodels::sph { sched.patch_data.for_each_patchdata( [&](u64 patch_id, shamrock::patch::PatchDataLayer &pdat) { PatchDataField &xyz - = pdat.template get_field(sched.pdl().get_field_idx("xyz")); + = pdat.template get_field(sched.pdl_old().get_field_idx("xyz")); PatchDataField &f - = pdat.template get_field(sched.pdl().get_field_idx(field_name)); + = pdat.template get_field(sched.pdl_old().get_field_idx(field_name)); if (f.get_nvar() != 1) { shambase::throw_unimplemented(); @@ -674,10 +674,10 @@ namespace shammodels::sph { sched.patch_data.for_each_patchdata( [&](u64 patch_id, shamrock::patch::PatchDataLayer &pdat) { PatchDataField &xyz - = pdat.template get_field(sched.pdl().get_field_idx("xyz")); + = pdat.template get_field(sched.pdl_old().get_field_idx("xyz")); PatchDataField &f - = pdat.template get_field(sched.pdl().get_field_idx(field_name)); + = pdat.template get_field(sched.pdl_old().get_field_idx(field_name)); if (f.get_nvar() != 1) { shambase::throw_unimplemented(); @@ -707,7 +707,7 @@ namespace shammodels::sph { sched.patch_data.for_each_patchdata( [&](u64 patch_id, shamrock::patch::PatchDataLayer &pdat) { PatchDataField &xyz - = pdat.template get_field(sched.pdl().get_field_idx(name)); + = pdat.template get_field(sched.pdl_old().get_field_idx(name)); sum += xyz.compute_sum(); }); @@ -721,7 +721,7 @@ namespace shammodels::sph { PatchScheduler &sched = shambase::get_check_ref(ctx.sched); - u32 ivxyz = sched.pdl().get_field_idx("vxyz"); + u32 ivxyz = sched.pdl_old().get_field_idx("vxyz"); // compute the total mass Tscal tot_mass = 0; @@ -763,7 +763,7 @@ namespace shammodels::sph { PatchScheduler &sched = shambase::get_check_ref(ctx.sched); - u32 ixyz = sched.pdl().get_field_idx("xyz"); + u32 ixyz = sched.pdl_old().get_field_idx("xyz"); // apply the position offset to the sinks if (!solver.storage.sinks.is_empty()) { diff --git a/src/shammodels/sph/include/shammodels/sph/SPHUtilities.hpp b/src/shammodels/sph/include/shammodels/sph/SPHUtilities.hpp index 7763a339fa..6d11dce973 100644 --- a/src/shammodels/sph/include/shammodels/sph/SPHUtilities.hpp +++ b/src/shammodels/sph/include/shammodels/sph/SPHUtilities.hpp @@ -81,7 +81,7 @@ namespace shammodels::sph { using namespace shamrock::patch; - const u32 ihpart = sched.pdl().template get_field_idx("hpart"); + const u32 ihpart = sched.pdl_old().template get_field_idx("hpart"); PatchField interactR_patch = sched.map_owned_to_patch_field_simple( [&](const Patch p, PatchDataLayer &pdat) -> flt { diff --git a/src/shammodels/sph/include/shammodels/sph/Solver.hpp b/src/shammodels/sph/include/shammodels/sph/Solver.hpp index 3816e28a69..001411df65 100644 --- a/src/shammodels/sph/include/shammodels/sph/Solver.hpp +++ b/src/shammodels/sph/include/shammodels/sph/Solver.hpp @@ -75,7 +75,7 @@ namespace shammodels::sph { Config solver_config; SolverLog solve_logs; - inline void init_required_fields() { solver_config.set_layout(context.get_pdl_write()); } + inline void init_required_fields() { solver_config.set_layout(context.get_pdl_write().get_layer_ref()); } // serial patch tree control void gen_serial_patch_tree(); diff --git a/src/shammodels/sph/include/shammodels/sph/modules/AnalysisBarycenter.hpp b/src/shammodels/sph/include/shammodels/sph/modules/AnalysisBarycenter.hpp index a216b5426f..f0ab9b8f34 100644 --- a/src/shammodels/sph/include/shammodels/sph/modules/AnalysisBarycenter.hpp +++ b/src/shammodels/sph/include/shammodels/sph/modules/AnalysisBarycenter.hpp @@ -54,7 +54,7 @@ namespace shammodels::sph::modules { auto dev_sched_ptr = shamsys::instance::get_compute_scheduler_ptr(); sham::DeviceQueue &q = shambase::get_check_ref(dev_sched_ptr).get_queue(); - const u32 ixyz = sched.pdl().template get_field_idx("xyz"); + const u32 ixyz = sched.pdl_old().template get_field_idx("xyz"); const Tscal pmass = solver.solver_config.gpart_mass; Tvec barycenter = {0, 0, 0}; // Not really barycenter per se but Mdisc * barycenter diff --git a/src/shammodels/sph/include/shammodels/sph/modules/AnalysisEnergyKinetic.hpp b/src/shammodels/sph/include/shammodels/sph/modules/AnalysisEnergyKinetic.hpp index d47d5f69a0..0efc89371c 100644 --- a/src/shammodels/sph/include/shammodels/sph/modules/AnalysisEnergyKinetic.hpp +++ b/src/shammodels/sph/include/shammodels/sph/modules/AnalysisEnergyKinetic.hpp @@ -45,7 +45,7 @@ namespace shammodels::sph::modules { auto dev_sched_ptr = shamsys::instance::get_compute_scheduler_ptr(); sham::DeviceQueue &q = shambase::get_check_ref(dev_sched_ptr).get_queue(); - const u32 ivxyz = sched.pdl().template get_field_idx("vxyz"); + const u32 ivxyz = sched.pdl_old().template get_field_idx("vxyz"); const Tscal pmass = solver.solver_config.gpart_mass; Tscal ekin = 0; diff --git a/src/shammodels/sph/include/shammodels/sph/modules/AnalysisEnergyPotential.hpp b/src/shammodels/sph/include/shammodels/sph/modules/AnalysisEnergyPotential.hpp index 323a4c315b..8fdbf6ce36 100644 --- a/src/shammodels/sph/include/shammodels/sph/modules/AnalysisEnergyPotential.hpp +++ b/src/shammodels/sph/include/shammodels/sph/modules/AnalysisEnergyPotential.hpp @@ -48,7 +48,7 @@ namespace shammodels::sph::modules { auto dev_sched_ptr = shamsys::instance::get_compute_scheduler_ptr(); sham::DeviceQueue &q = shambase::get_check_ref(dev_sched_ptr).get_queue(); - const u32 ixyz = sched.pdl().template get_field_idx("xyz"); + const u32 ixyz = sched.pdl_old().template get_field_idx("xyz"); const Tscal pmass = solver.solver_config.gpart_mass; Tscal epot = 0; diff --git a/src/shammodels/sph/include/shammodels/sph/modules/AnalysisTotalMomentum.hpp b/src/shammodels/sph/include/shammodels/sph/modules/AnalysisTotalMomentum.hpp index a76b7091cd..079466b684 100644 --- a/src/shammodels/sph/include/shammodels/sph/modules/AnalysisTotalMomentum.hpp +++ b/src/shammodels/sph/include/shammodels/sph/modules/AnalysisTotalMomentum.hpp @@ -46,7 +46,7 @@ namespace shammodels::sph::modules { auto dev_sched_ptr = shamsys::instance::get_compute_scheduler_ptr(); sham::DeviceQueue &q = shambase::get_check_ref(dev_sched_ptr).get_queue(); - const u32 ivxyz = sched.pdl().template get_field_idx("vxyz"); + const u32 ivxyz = sched.pdl_old().template get_field_idx("vxyz"); const Tscal pmass = solver.solver_config.gpart_mass; Tvec total_momentum = {}; diff --git a/src/shammodels/sph/include/shammodels/sph/modules/setup/GeneratorLatticeCubic.hpp b/src/shammodels/sph/include/shammodels/sph/modules/setup/GeneratorLatticeCubic.hpp index c4391d7b09..8a9e751473 100644 --- a/src/shammodels/sph/include/shammodels/sph/modules/setup/GeneratorLatticeCubic.hpp +++ b/src/shammodels/sph/include/shammodels/sph/modules/setup/GeneratorLatticeCubic.hpp @@ -90,7 +90,7 @@ namespace shammodels::sph::modules { } // Make a patchdata from pos_data - PatchDataLayer tmp(sched.get_layout_ptr()); + PatchDataLayer tmp(sched.get_layout_ptr_old()); if (!pos_data.empty()) { tmp.resize(pos_data.size()); tmp.fields_raz(); @@ -98,14 +98,14 @@ namespace shammodels::sph::modules { { u32 len = pos_data.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("xyz")); + = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); // sycl::buffer buf(pos_data.data(), len); f.override(pos_data, len); } { PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("hpart")); + = tmp.get_field(sched.pdl_old().get_field_idx("hpart")); f.override(dr); } } diff --git a/src/shammodels/sph/include/shammodels/sph/modules/setup/GeneratorLatticeHCP.hpp b/src/shammodels/sph/include/shammodels/sph/modules/setup/GeneratorLatticeHCP.hpp index 75a30d93f8..60d2575e8c 100644 --- a/src/shammodels/sph/include/shammodels/sph/modules/setup/GeneratorLatticeHCP.hpp +++ b/src/shammodels/sph/include/shammodels/sph/modules/setup/GeneratorLatticeHCP.hpp @@ -90,7 +90,7 @@ namespace shammodels::sph::modules { } // Make a patchdata from pos_data - PatchDataLayer tmp(sched.get_layout_ptr()); + PatchDataLayer tmp(sched.get_layout_ptr_old()); if (!pos_data.empty()) { tmp.resize(pos_data.size()); tmp.fields_raz(); @@ -98,14 +98,14 @@ namespace shammodels::sph::modules { { u32 len = pos_data.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("xyz")); + = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); // sycl::buffer buf(pos_data.data(), len); f.override(pos_data, len); } { PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("hpart")); + = tmp.get_field(sched.pdl_old().get_field_idx("hpart")); f.override(dr); } } diff --git a/src/shammodels/sph/src/Model.cpp b/src/shammodels/sph/src/Model.cpp index a684bf1bf4..b4c2b1a339 100644 --- a/src/shammodels/sph/src/Model.cpp +++ b/src/shammodels/sph/src/Model.cpp @@ -305,13 +305,13 @@ void shammodels::sph::Model::push_particle( patch_coord.lower, patch_coord.upper); - PatchDataLayer tmp(sched.get_layout_ptr()); + PatchDataLayer tmp(sched.get_layout_ptr_old()); tmp.resize(vec_acc.size()); tmp.fields_raz(); { u32 len = vec_acc.size(); - PatchDataField &f = tmp.get_field(sched.pdl().get_field_idx("xyz")); + PatchDataField &f = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); sycl::buffer buf(vec_acc.data(), len); f.override(buf, len); } @@ -319,7 +319,7 @@ void shammodels::sph::Model::push_particle( { u32 len = vec_acc.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("hpart")); + = tmp.get_field(sched.pdl_old().get_field_idx("hpart")); sycl::buffer buf(hpart_acc.data(), len); f.override(buf, len); } @@ -327,7 +327,7 @@ void shammodels::sph::Model::push_particle( { u32 len = u_acc.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("uint")); + = tmp.get_field(sched.pdl_old().get_field_idx("uint")); sycl::buffer buf(u_acc.data(), len); f.override(buf, len); } @@ -400,13 +400,13 @@ void shammodels::sph::Model::push_particle_mhd( patch_coord.lower, patch_coord.upper); - PatchDataLayer tmp(sched.get_layout_ptr()); + PatchDataLayer tmp(sched.get_layout_ptr_old()); tmp.resize(vec_acc.size()); tmp.fields_raz(); { u32 len = vec_acc.size(); - PatchDataField &f = tmp.get_field(sched.pdl().get_field_idx("xyz")); + PatchDataField &f = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); sycl::buffer buf(vec_acc.data(), len); f.override(buf, len); } @@ -414,7 +414,7 @@ void shammodels::sph::Model::push_particle_mhd( { u32 len = vec_acc.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("hpart")); + = tmp.get_field(sched.pdl_old().get_field_idx("hpart")); sycl::buffer buf(hpart_acc.data(), len); f.override(buf, len); } @@ -422,14 +422,14 @@ void shammodels::sph::Model::push_particle_mhd( { u32 len = u_acc.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("uint")); + = tmp.get_field(sched.pdl_old().get_field_idx("uint")); sycl::buffer buf(u_acc.data(), len); f.override(buf, len); } { u32 len = vec_acc.size(); - PatchDataField &f = tmp.get_field(sched.pdl().get_field_idx("B/rho")); + PatchDataField &f = tmp.get_field(sched.pdl_old().get_field_idx("B/rho")); sycl::buffer buf(B_on_rho_acc.data(), len); f.override(buf, len); } @@ -437,7 +437,7 @@ void shammodels::sph::Model::push_particle_mhd( { u32 len = vec_acc.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("psi/ch")); + = tmp.get_field(sched.pdl_old().get_field_idx("psi/ch")); sycl::buffer buf(psi_on_ch_acc.data(), len); f.override(buf, len); } @@ -544,21 +544,21 @@ void shammodels::sph::Model::add_cube_hcp_3d( // reserve space to avoid allocating during copy pdat.reserve(vec_acc.size()); - PatchDataLayer tmp(sched.get_layout_ptr()); + PatchDataLayer tmp(sched.get_layout_ptr_old()); tmp.resize(vec_acc.size()); tmp.fields_raz(); { u32 len = vec_acc.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("xyz")); + = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); // sycl::buffer buf(vec_acc.data(), len); f.override(vec_acc, len); } { PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("hpart")); + = tmp.get_field(sched.pdl_old().get_field_idx("hpart")); f.override(dr); } @@ -627,20 +627,20 @@ void shammodels::sph::Model::add_cube_hcp_3d_v2( shamrock::DataInserterUtility inserter(sched); auto push_current_data = [&](std::vector pos_data) { - PatchDataLayer tmp(sched.get_layout_ptr()); + PatchDataLayer tmp(sched.get_layout_ptr_old()); tmp.resize(pos_data.size()); tmp.fields_raz(); { u32 len = pos_data.size(); - PatchDataField &f = tmp.get_field(sched.pdl().get_field_idx("xyz")); + PatchDataField &f = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); // sycl::buffer buf(pos_data.data(), len); f.override(pos_data, len); } { PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("hpart")); + = tmp.get_field(sched.pdl_old().get_field_idx("hpart")); f.override(dr); } @@ -1004,14 +1004,14 @@ void shammodels::sph::Model::add_big_disc_3d( // reserve space to avoid allocating during copy pdat.reserve(vec_pos.size()); - PatchDataLayer tmp(sched.get_layout_ptr()); + PatchDataLayer tmp(sched.get_layout_ptr_old()); tmp.resize(vec_pos.size()); tmp.fields_raz(); { u32 len = vec_pos.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("xyz")); + = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); sycl::buffer buf(vec_pos.data(), len); f.override(buf, len); } @@ -1019,7 +1019,7 @@ void shammodels::sph::Model::add_big_disc_3d( { u32 len = vec_pos.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("hpart")); + = tmp.get_field(sched.pdl_old().get_field_idx("hpart")); sycl::buffer buf(vec_h.data(), len); f.override(buf, len); } @@ -1027,7 +1027,7 @@ void shammodels::sph::Model::add_big_disc_3d( { u32 len = vec_pos.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("uint")); + = tmp.get_field(sched.pdl_old().get_field_idx("uint")); sycl::buffer buf(vec_u.data(), len); f.override(buf, len); } @@ -1035,7 +1035,7 @@ void shammodels::sph::Model::add_big_disc_3d( if (solver.solver_config.is_eos_locally_isothermal()) { u32 len = vec_pos.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("soundspeed")); + = tmp.get_field(sched.pdl_old().get_field_idx("soundspeed")); sycl::buffer buf(vec_cs.data(), len); f.override(buf, len); } @@ -1043,7 +1043,7 @@ void shammodels::sph::Model::add_big_disc_3d( { u32 len = vec_pos.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("vxyz")); + = tmp.get_field(sched.pdl_old().get_field_idx("vxyz")); sycl::buffer buf(vec_vel.data(), len); f.override(buf, len); } @@ -1164,21 +1164,21 @@ void shammodels::sph::Model::add_cube_fcc_3d( patch_coord.lower, patch_coord.upper); - PatchDataLayer tmp(sched.get_layout_ptr()); + PatchDataLayer tmp(sched.get_layout_ptr_old()); tmp.resize(vec_acc.size()); tmp.fields_raz(); { u32 len = vec_acc.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("xyz")); + = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); sycl::buffer buf(vec_acc.data(), len); f.override(buf, len); } { PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("hpart")); + = tmp.get_field(sched.pdl_old().get_field_idx("hpart")); f.override(dr); } @@ -1366,7 +1366,7 @@ void shammodels::sph::Model::init_from_phantom_dump(PhantomDump } } - PatchDataLayer ptmp(sched.get_layout_ptr()); + PatchDataLayer ptmp(sched.get_layout_ptr_old()); ptmp.resize(sel_index.size()); ptmp.fields_raz(); diff --git a/src/shammodels/sph/src/Solver.cpp b/src/shammodels/sph/src/Solver.cpp index 426e3edccb..7a1c35480b 100644 --- a/src/shammodels/sph/src/Solver.cpp +++ b/src/shammodels/sph/src/Solver.cpp @@ -102,7 +102,7 @@ template class Kern> void shammodels::sph::Solver::init_solver_graph() { - shamrock::patch::PatchDataLayerLayout &pdl = scheduler().pdl(); + shamrock::patch::PatchDataLayerLayout &pdl = scheduler().pdl_old(); bool has_B_field = solver_config.has_field_B_on_rho(); bool has_psi_field = solver_config.has_field_psi_on_ch(); bool has_epsilon_field = solver_config.dust_config.has_epsilon_field(); @@ -659,7 +659,7 @@ void shammodels::sph::Solver::apply_position_boundary(Tscal time_val shamrock::SchedulerUtility integrators(sched); shamrock::ReattributeDataUtility reatrib(sched); - auto &pdl = sched.pdl(); + auto &pdl = sched.pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); @@ -772,7 +772,7 @@ void shammodels::sph::Solver::do_predictor_leapfrog(Tscal dt) { StackEntry stack_loc{}; using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); const u32 iaxyz = pdl.get_field_idx("axyz"); @@ -844,7 +844,7 @@ void shammodels::sph::Solver::sph_prestep(Tscal time_val, Tscal dt) SPHUtils sph_utils(scheduler()); shamrock::SchedulerUtility utility(scheduler()); - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ihpart = pdl.get_field_idx("hpart"); ComputeField _epsilon_h, _h_old; @@ -1185,7 +1185,7 @@ void shammodels::sph::Solver::communicate_merge_ghosts_fields() { bool has_epsilon_field = solver_config.dust_config.has_epsilon_field(); bool has_deltav_field = solver_config.dust_config.has_deltav_field(); - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); const u32 iaxyz = pdl.get_field_idx("axyz"); @@ -1432,7 +1432,7 @@ void shammodels::sph::Solver::prepare_corrector() { using namespace shamrock; using namespace shamrock::patch; shamrock::SchedulerUtility utility(scheduler()); - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); bool has_B_field = solver_config.has_field_B_on_rho(); bool has_psi_field = solver_config.has_field_psi_on_ch(); @@ -1503,7 +1503,7 @@ void shammodels::sph::Solver::part_killing_step() { return; } - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); std::shared_ptr> pos @@ -1604,7 +1604,7 @@ shammodels::sph::TimestepLog shammodels::sph::Solver::evolve_once() bool has_epsilon_field = solver_config.dust_config.has_epsilon_field(); bool has_deltav_field = solver_config.dust_config.has_deltav_field(); - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); @@ -1860,7 +1860,7 @@ shammodels::sph::TimestepLog shammodels::sph::Solver::evolve_once() node_set_edge->evaluate(); shamrock::solvergraph::CopyPatchDataFieldFromLayer node_copy( - scheduler().get_layout_ptr(), "alpha_AV"); + scheduler().get_layout_ptr_old(), "alpha_AV"); node_copy.set_edges(patchdatas, storage.alpha_av_updated); node_copy.evaluate(); } diff --git a/src/shammodels/sph/src/modules/AnalysisDisc.cpp b/src/shammodels/sph/src/modules/AnalysisDisc.cpp index 36d1af7ffd..2d1454f82f 100644 --- a/src/shammodels/sph/src/modules/AnalysisDisc.cpp +++ b/src/shammodels/sph/src/modules/AnalysisDisc.cpp @@ -41,7 +41,7 @@ auto shammodels::sph::modules::AnalysisDisc::compute_analysis_b using namespace shamrock::patch; PatchScheduler &sched = shambase::get_check_ref(context.sched); - PatchDataLayerLayout &pdl = sched.pdl(); + PatchDataLayerLayout &pdl = sched.pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); @@ -194,7 +194,7 @@ auto shammodels::sph::modules::AnalysisDisc::compute_analysis_s using namespace shamrock; using namespace shamrock::patch; PatchScheduler &sched = shambase::get_check_ref(context.sched); - PatchDataLayerLayout &pdl = sched.pdl(); + PatchDataLayerLayout &pdl = sched.pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); diff --git a/src/shammodels/sph/src/modules/AnalysisSodTube.cpp b/src/shammodels/sph/src/modules/AnalysisSodTube.cpp index dea13983bd..f0dceaee95 100644 --- a/src/shammodels/sph/src/modules/AnalysisSodTube.cpp +++ b/src/shammodels/sph/src/modules/AnalysisSodTube.cpp @@ -48,7 +48,7 @@ auto shammodels::sph::modules::AnalysisSodTube::compute_L2_dist auto &sched = scheduler(); using namespace shamrock::patch; - PatchDataLayerLayout &pdl = sched.pdl(); + PatchDataLayerLayout &pdl = sched.pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ihpart = pdl.get_field_idx("hpart"); diff --git a/src/shammodels/sph/src/modules/ConservativeCheck.cpp b/src/shammodels/sph/src/modules/ConservativeCheck.cpp index 126d4bec5d..d094116a10 100644 --- a/src/shammodels/sph/src/modules/ConservativeCheck.cpp +++ b/src/shammodels/sph/src/modules/ConservativeCheck.cpp @@ -35,7 +35,7 @@ void shammodels::sph::modules::ConservativeCheck::check_conserv using namespace shamrock::patch; using Sink = SinkParticle; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); diff --git a/src/shammodels/sph/src/modules/DiffOperator.cpp b/src/shammodels/sph/src/modules/DiffOperator.cpp index 04b4cdfdbd..4f2090eaac 100644 --- a/src/shammodels/sph/src/modules/DiffOperator.cpp +++ b/src/shammodels/sph/src/modules/DiffOperator.cpp @@ -32,7 +32,7 @@ void shammodels::sph::modules::DiffOperators::update_divv() { using namespace shamrock; using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); shambase::DistributedData &mpdats = storage.merged_patchdata_ghost.get(); @@ -155,7 +155,7 @@ void shammodels::sph::modules::DiffOperators::update_curlv() { using namespace shamrock; using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); shambase::DistributedData &mpdats = storage.merged_patchdata_ghost.get(); diff --git a/src/shammodels/sph/src/modules/DiffOperatorDtDivv.cpp b/src/shammodels/sph/src/modules/DiffOperatorDtDivv.cpp index a9a6b4b68c..6500daf65f 100644 --- a/src/shammodels/sph/src/modules/DiffOperatorDtDivv.cpp +++ b/src/shammodels/sph/src/modules/DiffOperatorDtDivv.cpp @@ -38,7 +38,7 @@ void shammodels::sph::modules::DiffOperatorDtDivv::update_dtdiv using namespace shamrock; using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 iaxyz = pdl.get_field_idx("axyz"); sph::BasicSPHGhostHandler &ghost_handle = storage.ghost_handler.get(); diff --git a/src/shammodels/sph/src/modules/ExternalForces.cpp b/src/shammodels/sph/src/modules/ExternalForces.cpp index b9fb59997d..eaac1a027a 100644 --- a/src/shammodels/sph/src/modules/ExternalForces.cpp +++ b/src/shammodels/sph/src/modules/ExternalForces.cpp @@ -53,7 +53,7 @@ void shammodels::sph::modules::ExternalForces::compute_ext_forc using namespace shamrock; using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 iaxyz_ext = pdl.get_field_idx("axyz_ext"); modules::SinkParticlesUpdate sink_update(context, solver_config, storage); @@ -246,7 +246,7 @@ void shammodels::sph::modules::ExternalForces::add_ext_forces() using namespace shamrock; using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old (); const u32 iaxyz = pdl.get_field_idx("axyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); @@ -476,7 +476,7 @@ void shammodels::sph::modules::ExternalForces::point_mass_accre using EF_PointMass = typename SolverConfigExtForce::PointMass; using EF_LenseThirring = typename SolverConfigExtForce::LenseThirring; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); diff --git a/src/shammodels/sph/src/modules/SPHSetup.cpp b/src/shammodels/sph/src/modules/SPHSetup.cpp index b9eb5b7d25..29bb32a7f5 100644 --- a/src/shammodels/sph/src/modules/SPHSetup.cpp +++ b/src/shammodels/sph/src/modules/SPHSetup.cpp @@ -307,7 +307,7 @@ void shammodels::sph::modules::SPHSetup::apply_setup_new( shambase::Timer time_part_gen; time_part_gen.start(); - shamrock::patch::PatchDataLayer to_insert(sched.get_layout_ptr()); + shamrock::patch::PatchDataLayer to_insert(sched.get_layout_ptr_old()); if (shamcomm::world_rank() == 0) { logger::normal_ln("SPH setup", "generating particles ..."); @@ -661,7 +661,7 @@ void shammodels::sph::modules::SPHSetup::apply_setup_new( _tmp.resize(indices_size); } - PatchDataLayer _tmp_pdat = PatchDataLayer(sched.get_layout_ptr()); + PatchDataLayer _tmp_pdat = PatchDataLayer(sched.get_layout_ptr_old()); to_insert.append_subset_to(_tmp, _tmp.get_size(), _tmp_pdat); idx_to_rem.append(_tmp); @@ -692,7 +692,7 @@ void shammodels::sph::modules::SPHSetup::apply_setup_new( // exchange the buffer held by the distrib data and give it to the // serializer shamalgs::SerializeHelper ser(dev_sched, std::forward>(buf)); - return PatchDataLayer::deserialize_buf(ser, sched.get_layout_ptr()); + return PatchDataLayer::deserialize_buf(ser, sched.get_layout_ptr_old()); }); // insert the data into the data to be inserted diff --git a/src/shammodels/sph/src/modules/SinkParticlesUpdate.cpp b/src/shammodels/sph/src/modules/SinkParticlesUpdate.cpp index 9e837d3361..b29dbab533 100644 --- a/src/shammodels/sph/src/modules/SinkParticlesUpdate.cpp +++ b/src/shammodels/sph/src/modules/SinkParticlesUpdate.cpp @@ -34,7 +34,7 @@ void shammodels::sph::modules::SinkParticlesUpdate::accrete_par using namespace shamrock; using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); @@ -204,7 +204,7 @@ void shammodels::sph::modules::SinkParticlesUpdate::compute_sph using namespace shamrock; using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 iaxyz_ext = pdl.get_field_idx("axyz_ext"); diff --git a/src/shammodels/sph/src/modules/UpdateDerivs.cpp b/src/shammodels/sph/src/modules/UpdateDerivs.cpp index 6b73b51e72..96980449dc 100644 --- a/src/shammodels/sph/src/modules/UpdateDerivs.cpp +++ b/src/shammodels/sph/src/modules/UpdateDerivs.cpp @@ -62,7 +62,7 @@ void shammodels::sph::modules::UpdateDerivs::update_derivs_cons using namespace shamrock; using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); @@ -262,7 +262,7 @@ void shammodels::sph::modules::UpdateDerivs::update_derivs_mm97 using namespace shamrock; using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); @@ -479,7 +479,7 @@ void shammodels::sph::modules::UpdateDerivs::update_derivs_cd10 using namespace shamrock; using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); @@ -681,7 +681,7 @@ void shammodels::sph::modules::UpdateDerivs::update_derivs_disc using namespace shamrock; using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); @@ -883,7 +883,7 @@ void shammodels::sph::modules::UpdateDerivs::update_derivs_MHD( using namespace shamrock; using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); diff --git a/src/shammodels/sph/src/modules/UpdateViscosity.cpp b/src/shammodels/sph/src/modules/UpdateViscosity.cpp index 43061f0023..d0a1aef625 100644 --- a/src/shammodels/sph/src/modules/UpdateViscosity.cpp +++ b/src/shammodels/sph/src/modules/UpdateViscosity.cpp @@ -55,7 +55,7 @@ void shammodels::sph::modules::UpdateViscosity::update_artifici shamlog_debug_ln("UpdateViscosity", "Updating alpha viscosity (Morris & Monaghan 1997)"); using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ialpha_AV = pdl.get_field_idx("alpha_AV"); const u32 idivv = pdl.get_field_idx("divv"); const u32 isoundspeed = pdl.get_field_idx("soundspeed"); @@ -126,7 +126,7 @@ void shammodels::sph::modules::UpdateViscosity::update_artifici shamlog_debug_ln("UpdateViscosity", "Updating alpha viscosity (Cullen & Dehnen 2010)"); using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ialpha_AV = pdl.get_field_idx("alpha_AV"); const u32 idivv = pdl.get_field_idx("divv"); const u32 idtdivv = pdl.get_field_idx("dtdivv"); diff --git a/src/shammodels/sph/src/modules/io/VTKDump.cpp b/src/shammodels/sph/src/modules/io/VTKDump.cpp index 667a2f820a..8dd1a9ce3f 100644 --- a/src/shammodels/sph/src/modules/io/VTKDump.cpp +++ b/src/shammodels/sph/src/modules/io/VTKDump.cpp @@ -42,7 +42,7 @@ namespace shammodels::sph::modules { using namespace shamrock::patch; shamrock::SchedulerUtility utility(scheduler()); - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 ixyz = pdl.get_field_idx("xyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); const u32 iaxyz = pdl.get_field_idx("axyz"); diff --git a/src/shammodels/sph/src/modules/setup/GeneratorMCDisc.cpp b/src/shammodels/sph/src/modules/setup/GeneratorMCDisc.cpp index e419e666a4..029adfb1a9 100644 --- a/src/shammodels/sph/src/modules/setup/GeneratorMCDisc.cpp +++ b/src/shammodels/sph/src/modules/setup/GeneratorMCDisc.cpp @@ -126,28 +126,28 @@ shamrock::patch::PatchDataLayer shammodels::sph::modules::GeneratorMCDisc &f = tmp.get_field(sched.pdl().get_field_idx("xyz")); + PatchDataField &f = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); sycl::buffer buf(vec_pos.data(), len); f.override(buf, len); } { u32 len = pos_data.size(); - PatchDataField &f = tmp.get_field(sched.pdl().get_field_idx("vxyz")); + PatchDataField &f = tmp.get_field(sched.pdl_old().get_field_idx("vxyz")); sycl::buffer buf(vec_vel.data(), len); f.override(buf, len); } { u32 len = vec_pos.size(); PatchDataField &f - = tmp.get_field(sched.pdl().get_field_idx("hpart")); + = tmp.get_field(sched.pdl_old().get_field_idx("hpart")); sycl::buffer buf(vec_h.data(), len); f.override(buf, len); } @@ -155,7 +155,7 @@ shamrock::patch::PatchDataLayer shammodels::sph::modules::GeneratorMCDisc &f - = tmp.get_field(sched.pdl().get_field_idx("soundspeed")); + = tmp.get_field(sched.pdl_old().get_field_idx("soundspeed")); sycl::buffer buf(vec_cs.data(), len); f.override(buf, len); } diff --git a/src/shammodels/sph/src/modules/setup/ModifierApplyCustomWarp.cpp b/src/shammodels/sph/src/modules/setup/ModifierApplyCustomWarp.cpp index 0e8eb30b84..ae2b86dcd6 100644 --- a/src/shammodels/sph/src/modules/setup/ModifierApplyCustomWarp.cpp +++ b/src/shammodels/sph/src/modules/setup/ModifierApplyCustomWarp.cpp @@ -33,7 +33,7 @@ shamrock::patch::PatchDataLayer shammodels::sph::modules::ModifierApplyCustomWar shamrock::patch::PatchDataLayer tmp = parent->next_n(nmax); ////////////////////////// load data ////////////////////////// - auto &pdl = sched.pdl(); + auto &pdl = sched.pdl_old(); sham::DeviceBuffer &buf_xyz = tmp.get_field_buf_ref(pdl.get_field_idx("xyz")); sham::DeviceBuffer &buf_vxyz = tmp.get_field_buf_ref(pdl.get_field_idx("vxyz")); diff --git a/src/shammodels/sph/src/modules/setup/ModifierApplyDiscWarp.cpp b/src/shammodels/sph/src/modules/setup/ModifierApplyDiscWarp.cpp index 88c9ac8d6b..58c379cbe7 100644 --- a/src/shammodels/sph/src/modules/setup/ModifierApplyDiscWarp.cpp +++ b/src/shammodels/sph/src/modules/setup/ModifierApplyDiscWarp.cpp @@ -41,7 +41,7 @@ shamrock::patch::PatchDataLayer shammodels::sph::modules::ModifierApplyDiscWarp< Tscal posangle = posangle_; ////////////////////////// load data ////////////////////////// - auto &pdl = sched.pdl(); + auto &pdl = sched.pdl_old(); sham::DeviceBuffer &buf_xyz = tmp.get_field_buf_ref(pdl.get_field_idx("xyz")); sham::DeviceBuffer &buf_vxyz = tmp.get_field_buf_ref(pdl.get_field_idx("vxyz")); diff --git a/src/shammodels/sph/src/modules/setup/ModifierFilter.cpp b/src/shammodels/sph/src/modules/setup/ModifierFilter.cpp index b48f46cfcf..47d4411d01 100644 --- a/src/shammodels/sph/src/modules/setup/ModifierFilter.cpp +++ b/src/shammodels/sph/src/modules/setup/ModifierFilter.cpp @@ -39,9 +39,9 @@ shamrock::patch::PatchDataLayer shammodels::sph::modules::ModifierFilter &buf_xyz - = tmp.get_field_buf_ref(sched.pdl().get_field_idx("xyz")); + = tmp.get_field_buf_ref(sched.pdl_old().get_field_idx("xyz")); sham::DeviceBuffer &buf_vxyz - = tmp.get_field_buf_ref(sched.pdl().get_field_idx("vxyz")); + = tmp.get_field_buf_ref(sched.pdl_old().get_field_idx("vxyz")); std::vector pos = buf_xyz.copy_to_stdvec(); diff --git a/src/shammodels/sph/src/modules/setup/ModifierOffset.cpp b/src/shammodels/sph/src/modules/setup/ModifierOffset.cpp index 9d1e4f31b4..f9abef0fe1 100644 --- a/src/shammodels/sph/src/modules/setup/ModifierOffset.cpp +++ b/src/shammodels/sph/src/modules/setup/ModifierOffset.cpp @@ -32,9 +32,9 @@ shamrock::patch::PatchDataLayer shammodels::sph::modules::ModifierOffset:: } sham::DeviceBuffer &buf_xyz - = tmp.get_field_buf_ref(sched.pdl().get_field_idx("xyz")); + = tmp.get_field_buf_ref(sched.pdl_old().get_field_idx("xyz")); sham::DeviceBuffer &buf_vxyz - = tmp.get_field_buf_ref(sched.pdl().get_field_idx("vxyz")); + = tmp.get_field_buf_ref(sched.pdl_old().get_field_idx("vxyz")); auto &q = shamsys::instance::get_compute_scheduler().get_queue(); diff --git a/src/shammodels/zeus/include/shammodels/zeus/Model.hpp b/src/shammodels/zeus/include/shammodels/zeus/Model.hpp index 3c969466ad..967d431f3f 100644 --- a/src/shammodels/zeus/include/shammodels/zeus/Model.hpp +++ b/src/shammodels/zeus/include/shammodels/zeus/Model.hpp @@ -73,7 +73,7 @@ namespace shammodels::zeus { sham::DeviceBuffer &buf_cell_max = pdat.get_field_buf_ref(1); PatchDataField &f - = pdat.template get_field(sched.pdl().get_field_idx(field_name)); + = pdat.template get_field(sched.pdl_old().get_field_idx(field_name)); { auto &buf = f.get_buf(); diff --git a/src/shammodels/zeus/src/modules/AnalysisSodTube.cpp b/src/shammodels/zeus/src/modules/AnalysisSodTube.cpp index 6af5bd82f4..8d150cbfd9 100644 --- a/src/shammodels/zeus/src/modules/AnalysisSodTube.cpp +++ b/src/shammodels/zeus/src/modules/AnalysisSodTube.cpp @@ -32,7 +32,7 @@ auto shammodels::zeus::modules::AnalysisSodTube::compute_L2_dist using namespace shammath; // load layout info - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 icell_min = pdl.get_field_idx("cell_min"); const u32 icell_max = pdl.get_field_idx("cell_max"); diff --git a/src/shammodels/zeus/src/modules/GhostZones.cpp b/src/shammodels/zeus/src/modules/GhostZones.cpp index 4cdf79f1cd..03dfb6d81e 100644 --- a/src/shammodels/zeus/src/modules/GhostZones.cpp +++ b/src/shammodels/zeus/src/modules/GhostZones.cpp @@ -333,7 +333,7 @@ void shammodels::zeus::modules::GhostZones::exchange_ghost() { u32 ivel_interf = ghost_layout.get_field_idx("vel"); // load layout info - PatchDataLayerLayout &pdl = scheduler().pdl(); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 icell_min = pdl.get_field_idx("cell_min"); const u32 icell_max = pdl.get_field_idx("cell_max"); diff --git a/src/shampylib/src/pyShamrockCtx.cpp b/src/shampylib/src/pyShamrockCtx.cpp index 1c1133307b..221800ed3b 100644 --- a/src/shampylib/src/pyShamrockCtx.cpp +++ b/src/shampylib/src/pyShamrockCtx.cpp @@ -286,7 +286,7 @@ Register_pymod(pyshamrockctxinit) { py::dict dic_out; - for (auto fname : ctx.pdl->get_field_names()) { + for (auto fname : ctx.pdl->get_layer_ref(0).get_field_names()) { append_to_map(fname, data, dic_out); append_to_map(fname, data, dic_out); append_to_map(fname, data, dic_out); diff --git a/src/shamrock/include/shamrock/amr/AMRGrid.hpp b/src/shamrock/include/shamrock/amr/AMRGrid.hpp index 4a3bd999c5..17ba1fd7d2 100644 --- a/src/shamrock/include/shamrock/amr/AMRGrid.hpp +++ b/src/shamrock/include/shamrock/amr/AMRGrid.hpp @@ -52,12 +52,12 @@ namespace shamrock::amr { void check_amr_main_fields() { bool correct_type = true; - correct_type &= sched.pdl().template check_field_type(0); - correct_type &= sched.pdl().template check_field_type(1); + correct_type &= sched.pdl_old().template check_field_type(0); + correct_type &= sched.pdl_old().template check_field_type(1); bool correct_names = true; - correct_names &= sched.pdl().template get_field(0).name == "cell_min"; - correct_names &= sched.pdl().template get_field(1).name == "cell_max"; + correct_names &= sched.pdl_old().template get_field(0).name == "cell_min"; + correct_names &= sched.pdl_old().template get_field(1).name == "cell_max"; if (!correct_type || !correct_names) { throw std::runtime_error( @@ -65,7 +65,7 @@ namespace shamrock::amr { " 0 : cell_min : nvar=1 type : (Coordinate type)\n" " 1 : cell_max : nvar=1 type : (Coordinate type)\n\n" "the current layout is : \n" - + sched.pdl().get_description_str()); + + sched.pdl_old().get_description_str()); } } @@ -541,7 +541,7 @@ namespace shamrock::amr { shambase::check_queue_state(shamsys::instance::get_compute_queue()); - patch::PatchDataLayer pdat(sched.get_layout_ptr()); + patch::PatchDataLayer pdat(sched.get_layout_ptr_old()); pdat.resize(cell_tot_count); shambase::check_queue_state(shamsys::instance::get_compute_queue()); diff --git a/src/shamrock/include/shamrock/legacy/io/dump.hpp b/src/shamrock/include/shamrock/legacy/io/dump.hpp index d3bdd6e248..cf823f2ed1 100644 --- a/src/shamrock/include/shamrock/legacy/io/dump.hpp +++ b/src/shamrock/include/shamrock/legacy/io/dump.hpp @@ -420,13 +420,13 @@ inline void dump_simbox(std::string prefix, PatchScheduler &sched) { MPI_Status st; - if (sched.pdl().check_main_field_type()) { + if (sched.pdl_old().check_main_field_type()) { u8 f = 0; auto [bmin, bmax] = sched.patch_data.sim_box.get_bounding_box(); shamcomm::mpi::File_write(simbox_file, &f, 1, mpi_type_u8, &st); shamcomm::mpi::File_write(simbox_file, &bmin, 1, mpi_type_f32_3, &st); shamcomm::mpi::File_write(simbox_file, &bmax, 1, mpi_type_f32_3, &st); - } else if (sched.pdl().check_main_field_type()) { + } else if (sched.pdl_old().check_main_field_type()) { u8 f = 1; auto [bmin, bmax] = sched.patch_data.sim_box.get_bounding_box(); shamcomm::mpi::File_write(simbox_file, &f, 1, mpi_type_u8, &st); diff --git a/src/shamrock/include/shamrock/legacy/patch/comm/patch_object_mover.hpp b/src/shamrock/include/shamrock/legacy/patch/comm/patch_object_mover.hpp index cdbda5bdc2..68840672bf 100644 --- a/src/shamrock/include/shamrock/legacy/patch/comm/patch_object_mover.hpp +++ b/src/shamrock/include/shamrock/legacy/patch/comm/patch_object_mover.hpp @@ -41,7 +41,7 @@ inline std::unordered_map> get_new_id_map( sched.patch_data.for_each_patchdata([&](u64 id, shamrock::patch::PatchDataLayer &pdat) { if (!pdat.is_empty()) { - u32 ixyz = sched.pdl().get_field_idx("xyz"); + u32 ixyz = sched.pdl_old().get_field_idx("xyz"); PatchDataField &xyz_field = pdat.get_field(ixyz); if (xyz_field.get_nvar() != 1) { @@ -72,7 +72,7 @@ inline std::unordered_map> get_new_id_map( sched.patch_data.for_each_patchdata([&](u64 id, shamrock::patch::PatchDataLayer &pdat) { if (!pdat.is_empty()) { - u32 ixyz = sched.pdl().get_field_idx("xyz"); + u32 ixyz = sched.pdl_old().get_field_idx("xyz"); PatchDataField &xyz_field = pdat.get_field(ixyz); if (xyz_field.get_nvar() != 1) { @@ -110,7 +110,7 @@ inline void reatribute_particles( sched.patch_data.for_each_patchdata([&](u64 id, shamrock::patch::PatchDataLayer &pdat) { if (!pdat.is_empty()) { - u32 ixyz = sched.pdl().get_field_idx("xyz"); + u32 ixyz = sched.pdl_old().get_field_idx("xyz"); PatchDataField &xyz_field = pdat.get_field(ixyz); if (xyz_field.get_nvar() != 1) { @@ -170,7 +170,7 @@ inline void reatribute_particles( f32_3 bmax = bmax_; sched.patch_data.for_each_patchdata([&](u64 id, shamrock::patch::PatchDataLayer &pdat) { - u32 ixyz = sched.pdl().get_field_idx("xyz"); + u32 ixyz = sched.pdl_old().get_field_idx("xyz"); PatchDataField &xyz_field = pdat.get_field(ixyz); { @@ -202,7 +202,7 @@ inline void reatribute_particles( sched.patch_data.for_each_patchdata([&](u64 id, shamrock::patch::PatchDataLayer &pdat) { if (!pdat.is_empty()) { - u32 ixyz = sched.pdl().get_field_idx("xyz"); + u32 ixyz = sched.pdl_old().get_field_idx("xyz"); PatchDataField &xyz_field = pdat.get_field(ixyz); if (xyz_field.get_nvar() != 1) { @@ -243,7 +243,7 @@ inline void reatribute_particles( std::unique_ptr &pdat_int = send_map[nid[i]]; if (!pdat_int) { - pdat_int = std::make_unique(sched.get_layout_ptr()); + pdat_int = std::make_unique(sched.get_layout_ptr_old()); } pdat.extract_element(i, *pdat_int); @@ -290,7 +290,7 @@ inline void reatribute_particles( } patch_data_exchange_object( - sched.get_layout_ptr(), sched.patch_list.global, comm_pdat, comm_vec, part_xchg_map); + sched.get_layout_ptr_old(), sched.patch_list.global, comm_pdat, comm_vec, part_xchg_map); for (auto &[recv_id, vec_r] : part_xchg_map) { // std::cout << "patch " << recv_id << "\n"; @@ -350,7 +350,7 @@ inline void reatribute_particles( sched.patch_data.for_each_patchdata([&](u64 id, shamrock::patch::PatchDataLayer &pdat) { if (!pdat.is_empty()) { - u32 ixyz = sched.pdl().get_field_idx("xyz"); + u32 ixyz = sched.pdl_old().get_field_idx("xyz"); PatchDataField &xyz_field = pdat.get_field(ixyz); if (xyz_field.get_nvar() != 1) { @@ -410,7 +410,7 @@ inline void reatribute_particles( f64_3 bmax = bmax_; sched.patch_data.for_each_patchdata([&](u64 id, shamrock::patch::PatchDataLayer &pdat) { - u32 ixyz = sched.pdl().get_field_idx("xyz"); + u32 ixyz = sched.pdl_old().get_field_idx("xyz"); PatchDataField &xyz_field = pdat.get_field(ixyz); { @@ -443,7 +443,7 @@ inline void reatribute_particles( sched.patch_data.for_each_patchdata([&](u64 id, shamrock::patch::PatchDataLayer &pdat) { if (!pdat.is_empty()) { - u32 ixyz = sched.pdl().get_field_idx("xyz"); + u32 ixyz = sched.pdl_old().get_field_idx("xyz"); PatchDataField &xyz_field = pdat.get_field(ixyz); if (xyz_field.get_nvar() != 1) { @@ -484,7 +484,7 @@ inline void reatribute_particles( std::unique_ptr &pdat_int = send_map[nid[i]]; if (!pdat_int) { - pdat_int = std::make_unique(sched.get_layout_ptr()); + pdat_int = std::make_unique(sched.get_layout_ptr_old()); } pdat.extract_element(i, *pdat_int); @@ -531,7 +531,7 @@ inline void reatribute_particles( } patch_data_exchange_object( - sched.get_layout_ptr(), sched.patch_list.global, comm_pdat, comm_vec, part_xchg_map); + sched.get_layout_ptr_old(), sched.patch_list.global, comm_pdat, comm_vec, part_xchg_map); for (auto &[recv_id, vec_r] : part_xchg_map) { // std::cout << "patch " << recv_id << "\n"; diff --git a/src/shamrock/include/shamrock/legacy/patch/interfaces/interface_handler_impl.hpp b/src/shamrock/include/shamrock/legacy/patch/interfaces/interface_handler_impl.hpp index 68a7f61f3d..91a99ad448 100644 --- a/src/shamrock/include/shamrock/legacy/patch/interfaces/interface_handler_impl.hpp +++ b/src/shamrock/include/shamrock/legacy/patch/interfaces/interface_handler_impl.hpp @@ -66,7 +66,7 @@ namespace impl { comm_pdat.push_back(std::move(pdat)); } } else { - comm_pdat.push_back(std::make_unique(sched.get_layout_ptr())); + comm_pdat.push_back(std::make_unique(sched.get_layout_ptr_old())); } comm_vec.push_back( u64_2{ @@ -78,7 +78,7 @@ namespace impl { } patch_data_exchange_object( - sched.get_layout_ptr(), sched.patch_list.global, comm_pdat, comm_vec, interface_map); + sched.get_layout_ptr_old(), sched.patch_list.global, comm_pdat, comm_vec, interface_map); } template diff --git a/src/shamrock/include/shamrock/legacy/patch/interfaces/interface_handler_impl/interface_handler_impl_tree.hpp b/src/shamrock/include/shamrock/legacy/patch/interfaces/interface_handler_impl/interface_handler_impl_tree.hpp index 3ebe491574..bb1628a202 100644 --- a/src/shamrock/include/shamrock/legacy/patch/interfaces/interface_handler_impl/interface_handler_impl_tree.hpp +++ b/src/shamrock/include/shamrock/legacy/patch/interfaces/interface_handler_impl/interface_handler_impl_tree.hpp @@ -150,7 +150,7 @@ class Interfacehandler(sched.get_layout_ptr())); + src.push_back(std::make_unique(sched.get_layout_ptr_old())); pdat_to_cut.append_subset_to( *ctree.list_pdat_extract_id[i], diff --git a/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp b/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp new file mode 100644 index 0000000000..9f38db3b7f --- /dev/null +++ b/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp @@ -0,0 +1,99 @@ +// -------------------------------------------------------// +// +// SHAMROCK code for hydrodynamics +// Copyright (c) 2021-2025 Timothée David--Cléris +// SPDX-License-Identifier: CeCILL Free Software License Agreement v2.1 +// Shamrock is licensed under the CeCILL 2.1 License, see LICENSE for more information +// +// -------------------------------------------------------// + +#pragma once + +/** + * @file PatchDataLayout.hpp + * @author Timothée David--Cléris (tim.shamrock@proton.me) + * @brief + */ + +#include "shambase/memory.hpp" +#include "shamrock/patch/PatchDataLayerLayout.hpp" +#include +#include + +namespace shamrock::patch { + + /** + * @brief PatchDataLayerLayout container class + * This class store the layout of the layers + */ + class PatchDataLayout { + public: + std::vector> layer_layouts; + + PatchDataLayout() = default; + + PatchDataLayout(u32 nlayers) { + for (size_t idx = 0; idx < nlayers; idx++) { + layer_layouts.push_back(std::make_shared()); + } + } + + size_t get_layer_count() const { return layer_layouts.size(); } + + inline std::shared_ptr &get_layer_ptr(size_t idx = 0) { + return layer_layouts.at(idx); + } + + inline const std::shared_ptr &get_layer_ptr(size_t idx = 0) const { + return layer_layouts.at(idx); + } + + inline PatchDataLayerLayout &get_layer_ref(size_t idx = 0) { + return shambase::get_check_ref(layer_layouts.at(idx)); + } + }; + + /** + * @brief Serialize a PatchDataLayout object to a JSON object + * + * This function takes a PatchDataLayout object and serializes it to a JSON object. + * It is used to convert the PatchDataLayout object to a JSON string. + * + * @param j The JSON object to serialize the PatchDataLayout object to + * @param p The PatchDataLayout object to serialize + */ + inline void to_json(nlohmann::json &j, const PatchDataLayout &p) { + using json = nlohmann::json; + std::vector layer_entries; + + for (const auto &layer_ptr : p.layer_layouts) { + if (layer_ptr) { + json layer_json; + to_json(layer_json, *layer_ptr); + layer_entries.push_back(layer_json); + } + } + + j = layer_entries; + } + + /** + * @brief Deserialize a PatchDataLayout object from a JSON object + * + * This function takes a JSON object and deserializes it to a PatchDataLayout object. + * It is used to convert a JSON string to a PatchDataLayout object. + * + * @param j The JSON object to deserialize the PatchDataLayout object from + * @param p The PatchDataLayout object to deserialize + */ + inline void from_json(const nlohmann::json &j, PatchDataLayout &p) { + p.layer_layouts.clear(); + + for (const auto &layer_json : j) { + auto layer_ptr = std::make_shared(); + from_json(layer_json, *layer_ptr); + p.layer_layouts.push_back(layer_ptr); + } + } + +} // namespace shamrock::patch diff --git a/src/shamrock/include/shamrock/scheduler/PatchScheduler.hpp b/src/shamrock/include/shamrock/scheduler/PatchScheduler.hpp index c3358fe2d8..4719737a92 100644 --- a/src/shamrock/include/shamrock/scheduler/PatchScheduler.hpp +++ b/src/shamrock/include/shamrock/scheduler/PatchScheduler.hpp @@ -25,6 +25,7 @@ #include "shambase/time.hpp" #include "shamalgs/collective/distributedDataComm.hpp" #include "shamrock/legacy/patch/utility/patch_field.hpp" +#include "shamrock/patch/PatchDataLayout.hpp" #include "shamrock/solvergraph/NodeSetEdge.hpp" #include "shamrock/solvergraph/PatchDataLayerRefs.hpp" #include @@ -64,7 +65,7 @@ class PatchScheduler { using PatchTree = shamrock::scheduler::PatchTree; using SchedulerPatchData = shamrock::scheduler::SchedulerPatchData; - std::shared_ptr pdl_ptr; + std::shared_ptr pdl_ptr; u64 crit_patch_split; ///< splitting limit (if load value > crit_patch_split => patch split) u64 crit_patch_merge; ///< merging limit (if load value < crit_patch_merge => patch merge) @@ -77,12 +78,31 @@ class PatchScheduler { std::unordered_set owned_patch_id; ///< list of owned patch ids updated with ///< (owned_patch_id = patch_list.build_local()) - inline shamrock::patch::PatchDataLayerLayout &pdl() { return shambase::get_check_ref(pdl_ptr); } + inline shamrock::patch::PatchDataLayout &pdl() { return shambase::get_check_ref(pdl_ptr); } - inline std::shared_ptr get_layout_ptr() const { + inline std::shared_ptr get_layout_ptr() const { return pdl_ptr; } + /// Will be deprecated in favor of the new one with layout support + inline shamrock::patch::PatchDataLayerLayout &pdl_old() { + auto &ref = pdl(); + if (ref.get_layer_count() != 1) { + throw shambase::make_except_with_loc( + "pdl_old is not supported for multiple layers"); + } + return ref.get_layer_ref(0); + } + + inline std::shared_ptr get_layout_ptr_old() const { + auto &ref = shambase::get_check_ref(pdl_ptr); + if (ref.get_layer_count() != 1) { + throw shambase::make_except_with_loc( + "get_layout_ptr_old is not supported for multiple layers"); + } + return ref.get_layer_ptr(0); + } + /** * @brief scheduler step * @@ -96,7 +116,7 @@ class PatchScheduler { void free_mpi_required_types(); PatchScheduler( - const std::shared_ptr &pdl_ptr, + const std::shared_ptr &pdl_ptr, u64 crit_split, u64 crit_merge); @@ -130,11 +150,11 @@ class PatchScheduler { template void set_coord_domain_bound(vectype bmin, vectype bmax) { - if (!pdl().check_main_field_type()) { + if (!pdl_old().check_main_field_type()) { std::invalid_argument( std::string("the main field is not of the correct type to call this function\n") + "fct called : " + __PRETTY_FUNCTION__ - + "current patch data layout : " + pdl().get_description_str()); + + "current patch data layout : " + pdl_old().get_description_str()); } patch_data.sim_box.set_bounding_box({bmin, bmax}); @@ -402,7 +422,7 @@ class PatchScheduler { StackEntry stack_loc{}; std::unique_ptr> ret; - auto fd = pdl().get_field(field_idx); + auto fd = pdl_old().get_field(field_idx); u64 nvar = fd.nvar; u64 num_obj = get_rank_count(); diff --git a/src/shamrock/include/shamrock/scheduler/ReattributeDataUtility.hpp b/src/shamrock/include/shamrock/scheduler/ReattributeDataUtility.hpp index 11e044ba43..a2394ed4c0 100644 --- a/src/shamrock/include/shamrock/scheduler/ReattributeDataUtility.hpp +++ b/src/shamrock/include/shamrock/scheduler/ReattributeDataUtility.hpp @@ -141,7 +141,7 @@ namespace shamrock { part_exchange.add_obj( current_pid, new_pid, - PatchDataLayer(sched.get_layout_ptr())); + PatchDataLayer(sched.get_layout_ptr_old())); } part_exchange.for_each( @@ -175,7 +175,7 @@ namespace shamrock { if (!part_exchange.has_key(current_pid, new_pid)) { part_exchange.add_obj( - current_pid, new_pid, PatchDataLayer(sched.get_layout_ptr())); + current_pid, new_pid, PatchDataLayer(sched.get_layout_ptr_old())); } part_exchange.for_each( @@ -217,7 +217,7 @@ namespace shamrock { using namespace shambase; using namespace shamrock::patch; - u32 ipos = sched.pdl().get_field_idx(position_field); + u32 ipos = sched.pdl_old().get_field_idx(position_field); DistributedData> new_pid = compute_new_pid(sptree, ipos); @@ -247,7 +247,7 @@ namespace shamrock { shamalgs::SerializeHelper ser( shamsys::instance::get_compute_scheduler_ptr(), std::forward>(buf)); - return PatchDataLayer::deserialize_buf(ser, sched.get_layout_ptr()); + return PatchDataLayer::deserialize_buf(ser, sched.get_layout_ptr_old()); }); recv_dat.for_each([&](u64 sender, u64 receiver, PatchDataLayer &pdat) { diff --git a/src/shamrock/include/shamrock/scheduler/ShamrockCtx.hpp b/src/shamrock/include/shamrock/scheduler/ShamrockCtx.hpp index 966b44758a..b083e23d74 100644 --- a/src/shamrock/include/shamrock/scheduler/ShamrockCtx.hpp +++ b/src/shamrock/include/shamrock/scheduler/ShamrockCtx.hpp @@ -41,14 +41,14 @@ class ShamAPIException : public std::exception { class ShamrockCtx { public: - std::shared_ptr pdl; + std::shared_ptr pdl; std::unique_ptr sched; inline void pdata_layout_new() { if (sched) { throw ShamAPIException("cannot modify patch data layout while the scheduler is on"); } - pdl = std::make_shared(); + pdl = std::make_shared(1); } // inline void pdata_layout_do_double_prec_mode(){ @@ -65,11 +65,11 @@ class ShamrockCtx { // pdl->xyz_mode = xyz32; //} - inline shamrock::patch::PatchDataLayerLayout &get_pdl_write() { + inline shamrock::patch::PatchDataLayout &get_pdl_write() { if (sched) { throw ShamAPIException("cannot modify patch data layout while the scheduler is on"); } - return *pdl; + return shambase::get_check_ref(pdl); } template @@ -77,21 +77,22 @@ class ShamrockCtx { if (sched) { throw ShamAPIException("cannot modify patch data layout while the scheduler is on"); } - pdl->add_field(fname, nvar); + shambase::get_check_ref(pdl).get_layer_ref(0).add_field(fname, nvar); } inline void pdata_layout_add_field_t(std::string fname, u32 nvar, std::string type) { if (sched) { throw ShamAPIException("cannot modify patch data layout while the scheduler is on"); } - pdl->add_field_t(fname, nvar, type); + shambase::get_check_ref(pdl).get_layer_ref(0).add_field_t(fname, nvar, type); } inline void pdata_layout_print() { if (!pdl) { throw ShamAPIException("patch data layout is not initialized"); } - std::cout << pdl->get_description_str() << std::endl; + std::cout << shambase::get_check_ref(pdl).get_layer_ref(0).get_description_str() + << std::endl; } inline void dump_status() { @@ -154,9 +155,13 @@ class ShamrockCtx { throw ShamAPIException("scheduler is not initialized"); } + if (pdl->get_layer_count() != 1) { + throw ShamAPIException("set_coord_domain_bound is not supported for multiple layers"); + } + auto [a, b] = box; - if (pdl->check_main_field_type()) { + if (pdl->get_layer_ref(0).check_main_field_type()) { auto conv_vec = [](f64_3 v) -> f32_3 { return {v.x(), v.y(), v.z()}; }; @@ -165,7 +170,7 @@ class ShamrockCtx { f32_3 vec1 = conv_vec(b); sched->set_coord_domain_bound(vec0, vec1); - } else if (pdl->check_main_field_type()) { + } else if (pdl->get_layer_ref(0).check_main_field_type()) { sched->set_coord_domain_bound(a, b); } else { diff --git a/src/shamrock/src/io/ShamrockDump.cpp b/src/shamrock/src/io/ShamrockDump.cpp index 8bc169fcb9..db405af1b8 100644 --- a/src/shamrock/src/io/ShamrockDump.cpp +++ b/src/shamrock/src/io/ShamrockDump.cpp @@ -190,7 +190,7 @@ namespace shamrock { json jpdat_info = json::parse(patchdata_infos); ctx.pdata_layout_new(); - *ctx.pdl = jmeta_patch.at("patchdata_layout").get(); + *ctx.pdl = jmeta_patch.at("patchdata_layout").get(); ctx.init_sched( jmeta_patch.at("crit_patch_split").get(), jmeta_patch.at("crit_patch_merge").get()); @@ -246,7 +246,7 @@ namespace shamrock { shamalgs::SerializeHelper ser( shamsys::instance::get_compute_scheduler_ptr(), std::move(out)); - patch::PatchDataLayer pdat = patch::PatchDataLayer::deserialize_buf(ser, ctx.pdl); + patch::PatchDataLayer pdat = patch::PatchDataLayer::deserialize_buf(ser, shambase::get_check_ref(ctx.pdl).get_layer_ptr(0)); sched.patch_data.owned_data.add_obj(pid, std::move(pdat)); } diff --git a/src/shamrock/src/legacy/patch/utility/merged_patch.cpp b/src/shamrock/src/legacy/patch/utility/merged_patch.cpp index 74c0d2fd43..0a9cb83341 100644 --- a/src/shamrock/src/legacy/patch/utility/merged_patch.cpp +++ b/src/shamrock/src/legacy/patch/utility/merged_patch.cpp @@ -27,7 +27,7 @@ auto MergedPatchData::merge_patches( std::unordered_map> merged_data; sched.for_each_patch_data([&](u64 id_patch, Patch &p, PatchDataLayer &pdat) { - merged_data.emplace(id_patch, sched.get_layout_ptr()); + merged_data.emplace(id_patch, sched.get_layout_ptr_old()); auto pbox = sched.patch_data.sim_box.get_box(p); u32 original_element = pdat.get_obj_cnt(); diff --git a/src/shamrock/src/scheduler/PatchScheduler.cpp b/src/shamrock/src/scheduler/PatchScheduler.cpp index 6efb8f604a..df7262711f 100644 --- a/src/shamrock/src/scheduler/PatchScheduler.cpp +++ b/src/shamrock/src/scheduler/PatchScheduler.cpp @@ -125,7 +125,7 @@ std::vector PatchScheduler::add_root_patches( patch_list._next_patch_id++; if (shamcomm::world_rank() == node_owner_id) { - patch_data.owned_data.add_obj(root.id_patch, PatchDataLayer(get_layout_ptr())); + patch_data.owned_data.add_obj(root.id_patch, PatchDataLayer(get_layout_ptr_old())); shamlog_debug_sycl_ln("Scheduler", "adding patch data"); } else { shamlog_debug_sycl_ln( @@ -171,7 +171,7 @@ void PatchScheduler::allpush_data(shamrock::patch::PatchDataLayer &pdat) { for_each_patch_data([&](u64 id_patch, shamrock::patch::Patch cur_p, shamrock::patch::PatchDataLayer &pdat_sched) { - auto variant_main = pdl().get_main_field_any(); + auto variant_main = pdl_old().get_main_field_any(); variant_main.visit([&](auto &arg) { using base_t = typename std::remove_reference::type::field_T; @@ -207,12 +207,12 @@ void PatchScheduler::add_root_patch() { } PatchScheduler::PatchScheduler( - const std::shared_ptr &pdl_ptr, + const std::shared_ptr &pdl_ptr, u64 crit_split, u64 crit_merge) : pdl_ptr(pdl_ptr), patch_data( - pdl_ptr, + pdl_ptr->get_layer_ptr(0), {{0, 0, 0}, {max_axis_patch_coord, max_axis_patch_coord, max_axis_patch_coord}}) { crit_patch_split = crit_split; @@ -251,7 +251,7 @@ void PatchScheduler::sync_build_LB(bool global_patch_sync, bool balance_load) { template<> std::tuple PatchScheduler::get_box_tranform() { - if (!pdl().check_main_field_type()) + if (!pdl_old().check_main_field_type()) throw shambase::make_except_with_loc( "cannot query single precision box the main field is not of f32_3 type"); @@ -265,7 +265,7 @@ std::tuple PatchScheduler::get_box_tranform() { template<> std::tuple PatchScheduler::get_box_tranform() { - if (!pdl().check_main_field_type()) + if (!pdl_old().check_main_field_type()) throw shambase::make_except_with_loc( "cannot query single precision box the main field is not of f64_3 type"); @@ -279,7 +279,7 @@ std::tuple PatchScheduler::get_box_tranform() { template<> std::tuple PatchScheduler::get_box_volume() { - if (!pdl().check_main_field_type()) + if (!pdl_old().check_main_field_type()) throw shambase::make_except_with_loc( "cannot query single precision box the main field is not of f32_3 type"); @@ -288,7 +288,7 @@ std::tuple PatchScheduler::get_box_volume() { template<> std::tuple PatchScheduler::get_box_volume() { - if (!pdl().check_main_field_type()) + if (!pdl_old().check_main_field_type()) throw shambase::make_except_with_loc( "cannot query single precision box the main field is not of f64_3 type"); @@ -297,7 +297,7 @@ std::tuple PatchScheduler::get_box_volume() { template<> std::tuple PatchScheduler::get_box_volume() { - if (!pdl().check_main_field_type()) + if (!pdl_old().check_main_field_type()) throw shambase::make_except_with_loc( "cannot query single precision box the main field is not of i64_3 type"); @@ -640,16 +640,16 @@ std::string PatchScheduler::dump_status() { std::string PatchScheduler::format_patch_coord(shamrock::patch::Patch p) { std::string ret; - if (pdl().check_main_field_type()) { + if (pdl_old().check_main_field_type()) { auto [bmin, bmax] = patch_data.sim_box.patch_coord_to_domain(p); ret = shambase::format("coord = {} {}", bmin, bmax); - } else if (pdl().check_main_field_type()) { + } else if (pdl_old().check_main_field_type()) { auto [bmin, bmax] = patch_data.sim_box.patch_coord_to_domain(p); ret = shambase::format("coord = {} {}", bmin, bmax); - } else if (pdl().check_main_field_type()) { + } else if (pdl_old().check_main_field_type()) { auto [bmin, bmax] = patch_data.sim_box.patch_coord_to_domain(p); ret = shambase::format("coord = {} {}", bmin, bmax); - } else if (pdl().check_main_field_type()) { + } else if (pdl_old().check_main_field_type()) { auto [bmin, bmax] = patch_data.sim_box.patch_coord_to_domain(p); ret = shambase::format("coord = {} {}", bmin, bmax); } else { @@ -683,15 +683,15 @@ void PatchScheduler::check_patchdata_locality_corectness() { StackEntry stack_loc{}; - if (pdl().check_main_field_type()) { + if (pdl_old().check_main_field_type()) { check_locality_t(*this); - } else if (pdl().check_main_field_type()) { + } else if (pdl_old().check_main_field_type()) { check_locality_t(*this); - } else if (pdl().check_main_field_type()) { + } else if (pdl_old().check_main_field_type()) { check_locality_t(*this); - } else if (pdl().check_main_field_type()) { + } else if (pdl_old().check_main_field_type()) { check_locality_t(*this); - } else if (pdl().check_main_field_type()) { + } else if (pdl_old().check_main_field_type()) { check_locality_t(*this); } else { throw shambase::make_except_with_loc( @@ -841,7 +841,7 @@ void PatchScheduler::dump_local_patches(std::string filename) { std::ofstream fout(filename); - if (pdl().check_main_field_type()) { + if (pdl_old().check_main_field_type()) { std::tuple box_transform = get_box_tranform(); @@ -862,7 +862,7 @@ void PatchScheduler::dump_local_patches(std::string filename) { fout.close(); - } else if (pdl().check_main_field_type()) { + } else if (pdl_old().check_main_field_type()) { std::tuple box_transform = get_box_tranform(); @@ -962,7 +962,7 @@ std::vector> PatchScheduler::ga shamalgs::SerializeHelper ser( shamsys::instance::get_compute_scheduler_ptr(), std::forward>(buf)); - return shamrock::patch::PatchDataLayer::deserialize_buf(ser, get_layout_ptr()); + return shamrock::patch::PatchDataLayer::deserialize_buf(ser, get_layout_ptr_old()); }; std::vector send_payloads; diff --git a/src/tests/benchmark_selfgrav.cpp b/src/tests/benchmark_selfgrav.cpp index 7923823112..95c6530de3 100644 --- a/src/tests/benchmark_selfgrav.cpp +++ b/src/tests/benchmark_selfgrav.cpp @@ -31,9 +31,9 @@ std::tuple benchmark_selfgrav(f32 dr, u32 npatch) { u64 Nesti = (2.F / dr) * (2.F / dr) * (2.F / dr); - std::shared_ptr pdl_ptr - = std::make_shared(); - auto &pdl = *pdl_ptr; + std::shared_ptr pdl_ptr + = std::make_shared(); + auto &pdl = pdl_ptr->get_layer_ref(); pdl.add_field("xyz", 1); pdl.add_field("hpart", 1); diff --git a/src/tests/shamrock_article_1Tests.cpp b/src/tests/shamrock_article_1Tests.cpp index 2fe414cf88..e3d5652da2 100644 --- a/src/tests/shamrock_article_1Tests.cpp +++ b/src/tests/shamrock_article_1Tests.cpp @@ -488,8 +488,8 @@ f64 amr_walk_perf( using namespace shamrock::patch; using namespace shamrock::scheduler; - std::shared_ptr layout_ptr = std::make_shared(); - auto &layout = *layout_ptr; + std::shared_ptr layout_ptr = std::make_shared(); + auto &layout = layout_ptr->get_layer_ref(); layout.add_field("cell_min", 1); layout.add_field("cell_max", 1); PatchScheduler sched(layout_ptr, 1e9, 1); From 28dae97ea89627a1b962e54c09b3a75ec511cf50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20David--Cl=C3=A9ris?= Date: Fri, 9 Jan 2026 22:01:08 +0100 Subject: [PATCH 02/15] [Patch] Move LayerLayout to new PatchDataLayout class --- .../shammodels/common/setup/modifiers.hpp | 79 ++++++++------- .../gsph/include/shammodels/gsph/Solver.hpp | 4 +- src/shammodels/gsph/src/Model.cpp | 12 +-- .../sph/include/shammodels/sph/Solver.hpp | 4 +- src/shammodels/sph/src/Model.cpp | 20 ++-- .../sph/src/modules/ExternalForces.cpp | 2 +- .../sph/src/modules/setup/GeneratorMCDisc.cpp | 10 +- .../interfaces/interface_handler_impl.hpp | 9 +- .../shamrock/patch/PatchDataLayout.hpp | 40 ++++---- .../shamrock/scheduler/PatchScheduler.hpp | 4 +- .../scheduler/ReattributeDataUtility.hpp | 98 ++++++++++--------- .../shamrock/scheduler/ShamrockCtx.hpp | 16 +-- src/shamrock/src/io/ShamrockDump.cpp | 3 +- src/tests/benchmark_selfgrav.cpp | 2 +- src/tests/shamrock_article_1Tests.cpp | 2 +- 15 files changed, 162 insertions(+), 143 deletions(-) diff --git a/src/shammodels/common/include/shammodels/common/setup/modifiers.hpp b/src/shammodels/common/include/shammodels/common/setup/modifiers.hpp index 66a6974b97..926eb4ccc0 100644 --- a/src/shammodels/common/include/shammodels/common/setup/modifiers.hpp +++ b/src/shammodels/common/include/shammodels/common/setup/modifiers.hpp @@ -31,29 +31,30 @@ namespace generic::setup::modifiers { inline void set_value_in_box( PatchScheduler &sched, T val, std::string name, std::tuple box) { StackEntry stack_loc{}; - sched.patch_data.for_each_patchdata([&](u64 patch_id, - shamrock::patch::PatchDataLayer &pdat) { - PatchDataField &xyz - = pdat.template get_field(sched.pdl_old().get_field_idx("xyz")); + sched.patch_data.for_each_patchdata( + [&](u64 patch_id, shamrock::patch::PatchDataLayer &pdat) { + PatchDataField &xyz + = pdat.template get_field(sched.pdl_old().get_field_idx("xyz")); - PatchDataField &f = pdat.template get_field(sched.pdl_old().get_field_idx(name)); + PatchDataField &f + = pdat.template get_field(sched.pdl_old().get_field_idx(name)); - { - auto &buf = f.get_buf(); - sycl::host_accessor acc{*buf}; + { + auto &buf = f.get_buf(); + sycl::host_accessor acc{*buf}; - auto &buf_xyz = xyz.get_buf(); - sycl::host_accessor acc_xyz{*buf_xyz}; + auto &buf_xyz = xyz.get_buf(); + sycl::host_accessor acc_xyz{*buf_xyz}; - for (u32 i = 0; i < f.size(); i++) { - vec r = acc_xyz[i]; + for (u32 i = 0; i < f.size(); i++) { + vec r = acc_xyz[i]; - if (BBAA::is_coord_in_range(r, std::get<0>(box), std::get<1>(box))) { - acc[i] = val; + if (BBAA::is_coord_in_range(r, std::get<0>(box), std::get<1>(box))) { + acc[i] = val; + } } } - } - }); + }); } template @@ -67,30 +68,31 @@ namespace generic::setup::modifiers { using flt = shambase::VecComponent; StackEntry stack_loc{}; - sched.patch_data.for_each_patchdata([&](u64 patch_id, - shamrock::patch::PatchDataLayer &pdat) { - PatchDataField &xyz - = pdat.template get_field(sched.pdl_old().get_field_idx("xyz")); + sched.patch_data.for_each_patchdata( + [&](u64 patch_id, shamrock::patch::PatchDataLayer &pdat) { + PatchDataField &xyz + = pdat.template get_field(sched.pdl_old().get_field_idx("xyz")); - PatchDataField &f = pdat.template get_field(sched.pdl_old().get_field_idx(name)); + PatchDataField &f + = pdat.template get_field(sched.pdl_old().get_field_idx(name)); - flt r2 = radius * radius; - { - auto &buf = f.get_buf(); - sycl::host_accessor acc{*buf}; + flt r2 = radius * radius; + { + auto &buf = f.get_buf(); + sycl::host_accessor acc{*buf}; - auto &buf_xyz = xyz.get_buf(); - sycl::host_accessor acc_xyz{*buf_xyz}; + auto &buf_xyz = xyz.get_buf(); + sycl::host_accessor acc_xyz{*buf_xyz}; - for (u32 i = 0; i < f.size(); i++) { - vec dr = acc_xyz[i] - center; + for (u32 i = 0; i < f.size(); i++) { + vec dr = acc_xyz[i] - center; - if (sycl::dot(dr, dr) < r2) { - acc[i] = val; + if (sycl::dot(dr, dr) < r2) { + acc[i] = val; + } } } - } - }); + }); } template @@ -141,12 +143,13 @@ namespace generic::setup::modifiers { T sum = shambase::VectorProperties::get_zero(); StackEntry stack_loc{}; - sched.patch_data.for_each_patchdata([&](u64 patch_id, - shamrock::patch::PatchDataLayer &pdat) { - PatchDataField &xyz = pdat.template get_field(sched.pdl_old().get_field_idx(name)); + sched.patch_data.for_each_patchdata( + [&](u64 patch_id, shamrock::patch::PatchDataLayer &pdat) { + PatchDataField &xyz + = pdat.template get_field(sched.pdl_old().get_field_idx(name)); - sum += xyz.compute_sum(); - }); + sum += xyz.compute_sum(); + }); return shamalgs::collective::allreduce_sum(sum); } diff --git a/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp b/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp index c32212caa9..acf218d7e2 100644 --- a/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp +++ b/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp @@ -86,7 +86,9 @@ namespace shammodels::gsph { Config solver_config; sph::SolverLog solve_logs; - inline void init_required_fields() { solver_config.set_layout(context.get_pdl_write().get_layer_ref()); } + inline void init_required_fields() { + solver_config.set_layout(context.get_pdl_write().get_layer_ref("main")); + } // Serial patch tree control void gen_serial_patch_tree(); diff --git a/src/shammodels/gsph/src/Model.cpp b/src/shammodels/gsph/src/Model.cpp index 9ea25397da..5a14350cd4 100644 --- a/src/shammodels/gsph/src/Model.cpp +++ b/src/shammodels/gsph/src/Model.cpp @@ -165,9 +165,9 @@ void shammodels::gsph::Model::add_cube_fcc_3d( tmp.fields_raz(); { - u32 len = vec_acc.size(); - PatchDataField &f - = tmp.template get_field(sched.pdl_old().template get_field_idx("xyz")); + u32 len = vec_acc.size(); + PatchDataField &f = tmp.template get_field( + sched.pdl_old().template get_field_idx("xyz")); sycl::buffer buf(vec_acc.data(), len); f.override(buf, len); } @@ -274,9 +274,9 @@ void shammodels::gsph::Model::add_cube_hcp_3d( tmp.fields_raz(); { - u32 len = vec_acc.size(); - PatchDataField &f - = tmp.template get_field(sched.pdl_old().template get_field_idx("xyz")); + u32 len = vec_acc.size(); + PatchDataField &f = tmp.template get_field( + sched.pdl_old().template get_field_idx("xyz")); sycl::buffer buf(vec_acc.data(), len); f.override(buf, len); } diff --git a/src/shammodels/sph/include/shammodels/sph/Solver.hpp b/src/shammodels/sph/include/shammodels/sph/Solver.hpp index 001411df65..80b4b53db3 100644 --- a/src/shammodels/sph/include/shammodels/sph/Solver.hpp +++ b/src/shammodels/sph/include/shammodels/sph/Solver.hpp @@ -75,7 +75,9 @@ namespace shammodels::sph { Config solver_config; SolverLog solve_logs; - inline void init_required_fields() { solver_config.set_layout(context.get_pdl_write().get_layer_ref()); } + inline void init_required_fields() { + solver_config.set_layout(context.get_pdl_write().get_layer_ref("main")); + } // serial patch tree control void gen_serial_patch_tree(); diff --git a/src/shammodels/sph/src/Model.cpp b/src/shammodels/sph/src/Model.cpp index b4c2b1a339..bd730420a2 100644 --- a/src/shammodels/sph/src/Model.cpp +++ b/src/shammodels/sph/src/Model.cpp @@ -310,8 +310,9 @@ void shammodels::sph::Model::push_particle( tmp.fields_raz(); { - u32 len = vec_acc.size(); - PatchDataField &f = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); + u32 len = vec_acc.size(); + PatchDataField &f + = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); sycl::buffer buf(vec_acc.data(), len); f.override(buf, len); } @@ -405,8 +406,9 @@ void shammodels::sph::Model::push_particle_mhd( tmp.fields_raz(); { - u32 len = vec_acc.size(); - PatchDataField &f = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); + u32 len = vec_acc.size(); + PatchDataField &f + = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); sycl::buffer buf(vec_acc.data(), len); f.override(buf, len); } @@ -428,8 +430,9 @@ void shammodels::sph::Model::push_particle_mhd( } { - u32 len = vec_acc.size(); - PatchDataField &f = tmp.get_field(sched.pdl_old().get_field_idx("B/rho")); + u32 len = vec_acc.size(); + PatchDataField &f + = tmp.get_field(sched.pdl_old().get_field_idx("B/rho")); sycl::buffer buf(B_on_rho_acc.data(), len); f.override(buf, len); } @@ -632,8 +635,9 @@ void shammodels::sph::Model::add_cube_hcp_3d_v2( tmp.fields_raz(); { - u32 len = pos_data.size(); - PatchDataField &f = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); + u32 len = pos_data.size(); + PatchDataField &f + = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); // sycl::buffer buf(pos_data.data(), len); f.override(pos_data, len); } diff --git a/src/shammodels/sph/src/modules/ExternalForces.cpp b/src/shammodels/sph/src/modules/ExternalForces.cpp index eaac1a027a..3031889eff 100644 --- a/src/shammodels/sph/src/modules/ExternalForces.cpp +++ b/src/shammodels/sph/src/modules/ExternalForces.cpp @@ -246,7 +246,7 @@ void shammodels::sph::modules::ExternalForces::add_ext_forces() using namespace shamrock; using namespace shamrock::patch; - PatchDataLayerLayout &pdl = scheduler().pdl_old (); + PatchDataLayerLayout &pdl = scheduler().pdl_old(); const u32 iaxyz = pdl.get_field_idx("axyz"); const u32 ivxyz = pdl.get_field_idx("vxyz"); diff --git a/src/shammodels/sph/src/modules/setup/GeneratorMCDisc.cpp b/src/shammodels/sph/src/modules/setup/GeneratorMCDisc.cpp index 029adfb1a9..9ff105ef4d 100644 --- a/src/shammodels/sph/src/modules/setup/GeneratorMCDisc.cpp +++ b/src/shammodels/sph/src/modules/setup/GeneratorMCDisc.cpp @@ -132,15 +132,17 @@ shamrock::patch::PatchDataLayer shammodels::sph::modules::GeneratorMCDisc &f = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); + u32 len = pos_data.size(); + PatchDataField &f + = tmp.get_field(sched.pdl_old().get_field_idx("xyz")); sycl::buffer buf(vec_pos.data(), len); f.override(buf, len); } { - u32 len = pos_data.size(); - PatchDataField &f = tmp.get_field(sched.pdl_old().get_field_idx("vxyz")); + u32 len = pos_data.size(); + PatchDataField &f + = tmp.get_field(sched.pdl_old().get_field_idx("vxyz")); sycl::buffer buf(vec_vel.data(), len); f.override(buf, len); } diff --git a/src/shamrock/include/shamrock/legacy/patch/interfaces/interface_handler_impl.hpp b/src/shamrock/include/shamrock/legacy/patch/interfaces/interface_handler_impl.hpp index 91a99ad448..874a1ec75a 100644 --- a/src/shamrock/include/shamrock/legacy/patch/interfaces/interface_handler_impl.hpp +++ b/src/shamrock/include/shamrock/legacy/patch/interfaces/interface_handler_impl.hpp @@ -66,7 +66,8 @@ namespace impl { comm_pdat.push_back(std::move(pdat)); } } else { - comm_pdat.push_back(std::make_unique(sched.get_layout_ptr_old())); + comm_pdat.push_back( + std::make_unique(sched.get_layout_ptr_old())); } comm_vec.push_back( u64_2{ @@ -78,7 +79,11 @@ namespace impl { } patch_data_exchange_object( - sched.get_layout_ptr_old(), sched.patch_list.global, comm_pdat, comm_vec, interface_map); + sched.get_layout_ptr_old(), + sched.patch_list.global, + comm_pdat, + comm_vec, + interface_map); } template diff --git a/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp b/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp index 9f38db3b7f..3a87663cfc 100644 --- a/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp +++ b/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp @@ -17,8 +17,8 @@ #include "shambase/memory.hpp" #include "shamrock/patch/PatchDataLayerLayout.hpp" +#include #include -#include namespace shamrock::patch { @@ -28,28 +28,24 @@ namespace shamrock::patch { */ class PatchDataLayout { public: - std::vector> layer_layouts; + std::unordered_map> + layer_layouts; PatchDataLayout() = default; - PatchDataLayout(u32 nlayers) { - for (size_t idx = 0; idx < nlayers; idx++) { - layer_layouts.push_back(std::make_shared()); - } - } - size_t get_layer_count() const { return layer_layouts.size(); } - inline std::shared_ptr &get_layer_ptr(size_t idx = 0) { - return layer_layouts.at(idx); + inline std::shared_ptr &get_layer_ptr(const std::string &name) { + return layer_layouts.at(name); } - inline const std::shared_ptr &get_layer_ptr(size_t idx = 0) const { - return layer_layouts.at(idx); + inline const std::shared_ptr &get_layer_ptr( + const std::string &name) const { + return layer_layouts.at(name); } - inline PatchDataLayerLayout &get_layer_ref(size_t idx = 0) { - return shambase::get_check_ref(layer_layouts.at(idx)); + inline PatchDataLayerLayout &get_layer_ref(const std::string &name) { + return shambase::get_check_ref(layer_layouts.at(name)); } }; @@ -64,16 +60,16 @@ namespace shamrock::patch { */ inline void to_json(nlohmann::json &j, const PatchDataLayout &p) { using json = nlohmann::json; - std::vector layer_entries; - - for (const auto &layer_ptr : p.layer_layouts) { + json layer_entries; + + for (const auto &[name, layer_ptr] : p.layer_layouts) { if (layer_ptr) { json layer_json; to_json(layer_json, *layer_ptr); - layer_entries.push_back(layer_json); + layer_entries[name] = layer_json; } } - + j = layer_entries; } @@ -88,11 +84,11 @@ namespace shamrock::patch { */ inline void from_json(const nlohmann::json &j, PatchDataLayout &p) { p.layer_layouts.clear(); - - for (const auto &layer_json : j) { + + for (const auto &[name, layer_json] : j.items()) { auto layer_ptr = std::make_shared(); from_json(layer_json, *layer_ptr); - p.layer_layouts.push_back(layer_ptr); + p.layer_layouts.emplace(name, std::move(layer_ptr)); } } diff --git a/src/shamrock/include/shamrock/scheduler/PatchScheduler.hpp b/src/shamrock/include/shamrock/scheduler/PatchScheduler.hpp index 4719737a92..7ef2a7c13d 100644 --- a/src/shamrock/include/shamrock/scheduler/PatchScheduler.hpp +++ b/src/shamrock/include/shamrock/scheduler/PatchScheduler.hpp @@ -91,7 +91,7 @@ class PatchScheduler { throw shambase::make_except_with_loc( "pdl_old is not supported for multiple layers"); } - return ref.get_layer_ref(0); + return ref.get_layer_ref("main"); } inline std::shared_ptr get_layout_ptr_old() const { @@ -100,7 +100,7 @@ class PatchScheduler { throw shambase::make_except_with_loc( "get_layout_ptr_old is not supported for multiple layers"); } - return ref.get_layer_ptr(0); + return ref.get_layer_ptr("main"); } /** diff --git a/src/shamrock/include/shamrock/scheduler/ReattributeDataUtility.hpp b/src/shamrock/include/shamrock/scheduler/ReattributeDataUtility.hpp index a2394ed4c0..3c123d2661 100644 --- a/src/shamrock/include/shamrock/scheduler/ReattributeDataUtility.hpp +++ b/src/shamrock/include/shamrock/scheduler/ReattributeDataUtility.hpp @@ -122,20 +122,56 @@ namespace shamrock { std::unordered_map histogram_extract; - sched.patch_data.for_each_patchdata([&](u64 current_pid, - shamrock::patch::PatchDataLayer &pdat) { - histogram_extract[current_pid] = 0; - if (!pdat.is_empty()) { + sched.patch_data.for_each_patchdata( + [&](u64 current_pid, shamrock::patch::PatchDataLayer &pdat) { + histogram_extract[current_pid] = 0; + if (!pdat.is_empty()) { + + sycl::host_accessor nid{new_pid.get(current_pid), sycl::read_only}; - sycl::host_accessor nid{new_pid.get(current_pid), sycl::read_only}; + if (false) { - if (false) { + const u32 cnt = pdat.get_obj_cnt(); - const u32 cnt = pdat.get_obj_cnt(); + for (u32 i = cnt - 1; i < cnt; i--) { + u64 new_pid = nid[i]; + if (current_pid != new_pid) { - for (u32 i = cnt - 1; i < cnt; i--) { - u64 new_pid = nid[i]; - if (current_pid != new_pid) { + if (!part_exchange.has_key(current_pid, new_pid)) { + part_exchange.add_obj( + current_pid, + new_pid, + PatchDataLayer(sched.get_layout_ptr_old())); + } + + part_exchange.for_each( + [&](u64 _old_id, u64 _new_id, PatchDataLayer &pdat_int) { + if (_old_id == current_pid && _new_id == new_pid) { + pdat.extract_element(i, pdat_int); + histogram_extract[current_pid]++; + } + }); + } + } + } else { + std::vector keep_ids; + std::unordered_map> extract_indexes; + + const u32 cnt = pdat.get_obj_cnt(); + for (u32 i = 0; i < cnt; i++) { + u64 new_pid = nid[i]; + if (current_pid != new_pid) { + extract_indexes[new_pid].push_back(i); + histogram_extract[current_pid]++; + } else { + keep_ids.push_back(i); + } + } + + for (auto &[new_id, vec] : extract_indexes) { + + u64 new_pid = new_id; + std::vector &idx_extract = vec; if (!part_exchange.has_key(current_pid, new_pid)) { part_exchange.add_obj( @@ -147,50 +183,16 @@ namespace shamrock { part_exchange.for_each( [&](u64 _old_id, u64 _new_id, PatchDataLayer &pdat_int) { if (_old_id == current_pid && _new_id == new_pid) { - pdat.extract_element(i, pdat_int); - histogram_extract[current_pid]++; + pdat.append_subset_to(idx_extract, pdat_int); } }); } - } - } else { - std::vector keep_ids; - std::unordered_map> extract_indexes; - - const u32 cnt = pdat.get_obj_cnt(); - for (u32 i = 0; i < cnt; i++) { - u64 new_pid = nid[i]; - if (current_pid != new_pid) { - extract_indexes[new_pid].push_back(i); - histogram_extract[current_pid]++; - } else { - keep_ids.push_back(i); - } - } - - for (auto &[new_id, vec] : extract_indexes) { - - u64 new_pid = new_id; - std::vector &idx_extract = vec; - - if (!part_exchange.has_key(current_pid, new_pid)) { - part_exchange.add_obj( - current_pid, new_pid, PatchDataLayer(sched.get_layout_ptr_old())); - } - part_exchange.for_each( - [&](u64 _old_id, u64 _new_id, PatchDataLayer &pdat_int) { - if (_old_id == current_pid && _new_id == new_pid) { - pdat.append_subset_to(idx_extract, pdat_int); - } - }); + sycl::buffer keep_idx = shamalgs::memory::vec_to_buf(keep_ids); + pdat.keep_ids(keep_idx, keep_ids.size()); } - - sycl::buffer keep_idx = shamalgs::memory::vec_to_buf(keep_ids); - pdat.keep_ids(keep_idx, keep_ids.size()); } - } - }); + }); for (auto &[k, v] : histogram_extract) { shamlog_debug_ln("ReattributeDataUtility", "patch", k, "extract=", v); diff --git a/src/shamrock/include/shamrock/scheduler/ShamrockCtx.hpp b/src/shamrock/include/shamrock/scheduler/ShamrockCtx.hpp index b083e23d74..dfe3126da5 100644 --- a/src/shamrock/include/shamrock/scheduler/ShamrockCtx.hpp +++ b/src/shamrock/include/shamrock/scheduler/ShamrockCtx.hpp @@ -48,7 +48,9 @@ class ShamrockCtx { if (sched) { throw ShamAPIException("cannot modify patch data layout while the scheduler is on"); } - pdl = std::make_shared(1); + pdl = std::make_shared(); + pdl->layer_layouts.emplace( + "main", std::make_shared()); } // inline void pdata_layout_do_double_prec_mode(){ @@ -77,21 +79,21 @@ class ShamrockCtx { if (sched) { throw ShamAPIException("cannot modify patch data layout while the scheduler is on"); } - shambase::get_check_ref(pdl).get_layer_ref(0).add_field(fname, nvar); + shambase::get_check_ref(pdl).get_layer_ref("main").add_field(fname, nvar); } inline void pdata_layout_add_field_t(std::string fname, u32 nvar, std::string type) { if (sched) { throw ShamAPIException("cannot modify patch data layout while the scheduler is on"); } - shambase::get_check_ref(pdl).get_layer_ref(0).add_field_t(fname, nvar, type); + shambase::get_check_ref(pdl).get_layer_ref("main").add_field_t(fname, nvar, type); } inline void pdata_layout_print() { if (!pdl) { throw ShamAPIException("patch data layout is not initialized"); } - std::cout << shambase::get_check_ref(pdl).get_layer_ref(0).get_description_str() + std::cout << shambase::get_check_ref(pdl).get_layer_ref("main").get_description_str() << std::endl; } @@ -155,13 +157,13 @@ class ShamrockCtx { throw ShamAPIException("scheduler is not initialized"); } - if (pdl->get_layer_count() != 1) { + if (pdl->get_layer_count() > 1) { throw ShamAPIException("set_coord_domain_bound is not supported for multiple layers"); } auto [a, b] = box; - if (pdl->get_layer_ref(0).check_main_field_type()) { + if (pdl->get_layer_ref("main").check_main_field_type()) { auto conv_vec = [](f64_3 v) -> f32_3 { return {v.x(), v.y(), v.z()}; }; @@ -170,7 +172,7 @@ class ShamrockCtx { f32_3 vec1 = conv_vec(b); sched->set_coord_domain_bound(vec0, vec1); - } else if (pdl->get_layer_ref(0).check_main_field_type()) { + } else if (pdl->get_layer_ref("main").check_main_field_type()) { sched->set_coord_domain_bound(a, b); } else { diff --git a/src/shamrock/src/io/ShamrockDump.cpp b/src/shamrock/src/io/ShamrockDump.cpp index db405af1b8..c3512c6a47 100644 --- a/src/shamrock/src/io/ShamrockDump.cpp +++ b/src/shamrock/src/io/ShamrockDump.cpp @@ -246,7 +246,8 @@ namespace shamrock { shamalgs::SerializeHelper ser( shamsys::instance::get_compute_scheduler_ptr(), std::move(out)); - patch::PatchDataLayer pdat = patch::PatchDataLayer::deserialize_buf(ser, shambase::get_check_ref(ctx.pdl).get_layer_ptr(0)); + patch::PatchDataLayer pdat = patch::PatchDataLayer::deserialize_buf( + ser, shambase::get_check_ref(ctx.pdl).get_layer_ptr(0)); sched.patch_data.owned_data.add_obj(pid, std::move(pdat)); } diff --git a/src/tests/benchmark_selfgrav.cpp b/src/tests/benchmark_selfgrav.cpp index 95c6530de3..4df4adf21e 100644 --- a/src/tests/benchmark_selfgrav.cpp +++ b/src/tests/benchmark_selfgrav.cpp @@ -33,7 +33,7 @@ std::tuple benchmark_selfgrav(f32 dr, u32 npatch) { std::shared_ptr pdl_ptr = std::make_shared(); - auto &pdl = pdl_ptr->get_layer_ref(); + auto &pdl = pdl_ptr->get_layer_ref("main"); pdl.add_field("xyz", 1); pdl.add_field("hpart", 1); diff --git a/src/tests/shamrock_article_1Tests.cpp b/src/tests/shamrock_article_1Tests.cpp index e3d5652da2..c3e437332e 100644 --- a/src/tests/shamrock_article_1Tests.cpp +++ b/src/tests/shamrock_article_1Tests.cpp @@ -489,7 +489,7 @@ f64 amr_walk_perf( using namespace shamrock::scheduler; std::shared_ptr layout_ptr = std::make_shared(); - auto &layout = layout_ptr->get_layer_ref(); + auto &layout = layout_ptr->get_layer_ref("main"); layout.add_field("cell_min", 1); layout.add_field("cell_max", 1); PatchScheduler sched(layout_ptr, 1e9, 1); From b6306de5d48f34657e0ecc77449f06467bf64852 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20David--Cl=C3=A9ris?= Date: Fri, 9 Jan 2026 22:07:44 +0100 Subject: [PATCH 03/15] authorship --- src/shamrock/include/shamrock/patch/PatchDataLayout.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp b/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp index 3a87663cfc..b3caa83061 100644 --- a/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp +++ b/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp @@ -12,6 +12,7 @@ /** * @file PatchDataLayout.hpp * @author Timothée David--Cléris (tim.shamrock@proton.me) + * @author Yona Lapeyre (yona.lapeyre@ens-lyon.fr) * @brief */ From 4ec5272496e04f1680f93866af5493fbecb7b4ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20David--Cl=C3=A9ris?= Date: Fri, 9 Jan 2026 22:09:16 +0100 Subject: [PATCH 04/15] address review --- src/shampylib/src/pyShamrockCtx.cpp | 2 +- src/shamrock/src/io/ShamrockDump.cpp | 2 +- src/shamrock/src/scheduler/PatchScheduler.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/shampylib/src/pyShamrockCtx.cpp b/src/shampylib/src/pyShamrockCtx.cpp index 221800ed3b..086fe0bbd4 100644 --- a/src/shampylib/src/pyShamrockCtx.cpp +++ b/src/shampylib/src/pyShamrockCtx.cpp @@ -286,7 +286,7 @@ Register_pymod(pyshamrockctxinit) { py::dict dic_out; - for (auto fname : ctx.pdl->get_layer_ref(0).get_field_names()) { + for (auto fname : ctx.pdl->get_layer_ref("main").get_field_names()) { append_to_map(fname, data, dic_out); append_to_map(fname, data, dic_out); append_to_map(fname, data, dic_out); diff --git a/src/shamrock/src/io/ShamrockDump.cpp b/src/shamrock/src/io/ShamrockDump.cpp index c3512c6a47..3531627a79 100644 --- a/src/shamrock/src/io/ShamrockDump.cpp +++ b/src/shamrock/src/io/ShamrockDump.cpp @@ -247,7 +247,7 @@ namespace shamrock { shamsys::instance::get_compute_scheduler_ptr(), std::move(out)); patch::PatchDataLayer pdat = patch::PatchDataLayer::deserialize_buf( - ser, shambase::get_check_ref(ctx.pdl).get_layer_ptr(0)); + ser, shambase::get_check_ref(ctx.pdl).get_layer_ptr("main")); sched.patch_data.owned_data.add_obj(pid, std::move(pdat)); } diff --git a/src/shamrock/src/scheduler/PatchScheduler.cpp b/src/shamrock/src/scheduler/PatchScheduler.cpp index df7262711f..f2cca49fce 100644 --- a/src/shamrock/src/scheduler/PatchScheduler.cpp +++ b/src/shamrock/src/scheduler/PatchScheduler.cpp @@ -212,7 +212,7 @@ PatchScheduler::PatchScheduler( u64 crit_merge) : pdl_ptr(pdl_ptr), patch_data( - pdl_ptr->get_layer_ptr(0), + pdl_ptr->get_layer_ptr("main"), {{0, 0, 0}, {max_axis_patch_coord, max_axis_patch_coord, max_axis_patch_coord}}) { crit_patch_split = crit_split; From 80d52df6795939a791317788bdd1e0ba9d155bbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20David--Cl=C3=A9ris?= Date: Sat, 10 Jan 2026 11:21:07 +0100 Subject: [PATCH 05/15] noicer --- .../gsph/include/shammodels/gsph/Solver.hpp | 2 +- .../sph/include/shammodels/sph/Solver.hpp | 2 +- src/shampylib/src/pyShamrockCtx.cpp | 7 +- .../shamrock/patch/PatchDataLayout.hpp | 69 ++++++++++++++----- .../shamrock/scheduler/PatchScheduler.hpp | 4 +- .../shamrock/scheduler/ShamrockCtx.hpp | 4 +- src/shamrock/src/io/ShamrockDump.cpp | 7 +- src/shamrock/src/scheduler/PatchScheduler.cpp | 7 +- src/tests/benchmark_selfgrav.cpp | 2 +- src/tests/shamrock_article_1Tests.cpp | 2 +- 10 files changed, 76 insertions(+), 30 deletions(-) diff --git a/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp b/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp index acf218d7e2..e4b69b6170 100644 --- a/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp +++ b/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp @@ -87,7 +87,7 @@ namespace shammodels::gsph { sph::SolverLog solve_logs; inline void init_required_fields() { - solver_config.set_layout(context.get_pdl_write().get_layer_ref("main")); + solver_config.set_layout(context.get_pdl_write().get_layer_ref(0)); } // Serial patch tree control diff --git a/src/shammodels/sph/include/shammodels/sph/Solver.hpp b/src/shammodels/sph/include/shammodels/sph/Solver.hpp index 80b4b53db3..dd32425faf 100644 --- a/src/shammodels/sph/include/shammodels/sph/Solver.hpp +++ b/src/shammodels/sph/include/shammodels/sph/Solver.hpp @@ -76,7 +76,7 @@ namespace shammodels::sph { SolverLog solve_logs; inline void init_required_fields() { - solver_config.set_layout(context.get_pdl_write().get_layer_ref("main")); + solver_config.set_layout(context.get_pdl_write().get_layer_ref(0)); } // serial patch tree control diff --git a/src/shampylib/src/pyShamrockCtx.cpp b/src/shampylib/src/pyShamrockCtx.cpp index 086fe0bbd4..f395ac6a7c 100644 --- a/src/shampylib/src/pyShamrockCtx.cpp +++ b/src/shampylib/src/pyShamrockCtx.cpp @@ -286,7 +286,12 @@ Register_pymod(pyshamrockctxinit) { py::dict dic_out; - for (auto fname : ctx.pdl->get_layer_ref("main").get_field_names()) { + if (ctx.pdl->get_layer_count() > 1) { + throw shambase::make_except_with_loc( + "collect_data is not supported for multiple layers"); + } + + for (auto fname : ctx.pdl->get_layer_ref(0).get_field_names()) { append_to_map(fname, data, dic_out); append_to_map(fname, data, dic_out); append_to_map(fname, data, dic_out); diff --git a/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp b/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp index b3caa83061..bc50e581ac 100644 --- a/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp +++ b/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp @@ -18,8 +18,9 @@ #include "shambase/memory.hpp" #include "shamrock/patch/PatchDataLayerLayout.hpp" -#include +#include #include +#include namespace shamrock::patch { @@ -29,24 +30,61 @@ namespace shamrock::patch { */ class PatchDataLayout { public: - std::unordered_map> - layer_layouts; + struct LayerEntry { + std::shared_ptr layout; + std::string name; + }; + + std::vector layer_layouts; PatchDataLayout() = default; + PatchDataLayout(const std::vector &layer_names) + : layer_layouts{layer_names.size()} { + for (size_t i = 0; i < layer_layouts.size(); i++) { + layer_layouts[i].name = layer_names[i]; + layer_layouts[i].layout = std::make_shared(); + } + } + + PatchDataLayout(std::initializer_list layer_names) + : PatchDataLayout(std::vector(layer_names)) {} + size_t get_layer_count() const { return layer_layouts.size(); } + size_t get_layer_index(const std::string &name) const { + for (size_t i = 0; i < layer_layouts.size(); i++) { + if (layer_layouts[i].name == name) { + return i; + } + } + throw shambase::make_except_with_loc( + "the requested layer does not exists"); + } + + inline std::shared_ptr &get_layer_ptr(size_t idx) { + return layer_layouts.at(idx).layout; + } + + inline const std::shared_ptr &get_layer_ptr(size_t idx) const { + return layer_layouts.at(idx).layout; + } + + inline PatchDataLayerLayout &get_layer_ref(size_t idx) { + return shambase::get_check_ref(get_layer_ptr(idx)); + } + inline std::shared_ptr &get_layer_ptr(const std::string &name) { - return layer_layouts.at(name); + return get_layer_ptr(get_layer_index(name)); } inline const std::shared_ptr &get_layer_ptr( const std::string &name) const { - return layer_layouts.at(name); + return get_layer_ptr(get_layer_index(name)); } inline PatchDataLayerLayout &get_layer_ref(const std::string &name) { - return shambase::get_check_ref(layer_layouts.at(name)); + return get_layer_ref(get_layer_index(name)); } }; @@ -61,14 +99,13 @@ namespace shamrock::patch { */ inline void to_json(nlohmann::json &j, const PatchDataLayout &p) { using json = nlohmann::json; - json layer_entries; + std::vector layer_entries; - for (const auto &[name, layer_ptr] : p.layer_layouts) { - if (layer_ptr) { - json layer_json; - to_json(layer_json, *layer_ptr); - layer_entries[name] = layer_json; - } + for (const auto &layer_entry : p.layer_layouts) { + + json layer_json; + to_json(layer_json, shambase::get_check_ref(layer_entry.layout)); + layer_entries.push_back(json{{"name", layer_entry.name}, {"layout", layer_json}}); } j = layer_entries; @@ -86,11 +123,7 @@ namespace shamrock::patch { inline void from_json(const nlohmann::json &j, PatchDataLayout &p) { p.layer_layouts.clear(); - for (const auto &[name, layer_json] : j.items()) { - auto layer_ptr = std::make_shared(); - from_json(layer_json, *layer_ptr); - p.layer_layouts.emplace(name, std::move(layer_ptr)); - } + logger::raw_ln(j.dump(4)); } } // namespace shamrock::patch diff --git a/src/shamrock/include/shamrock/scheduler/PatchScheduler.hpp b/src/shamrock/include/shamrock/scheduler/PatchScheduler.hpp index 7ef2a7c13d..4719737a92 100644 --- a/src/shamrock/include/shamrock/scheduler/PatchScheduler.hpp +++ b/src/shamrock/include/shamrock/scheduler/PatchScheduler.hpp @@ -91,7 +91,7 @@ class PatchScheduler { throw shambase::make_except_with_loc( "pdl_old is not supported for multiple layers"); } - return ref.get_layer_ref("main"); + return ref.get_layer_ref(0); } inline std::shared_ptr get_layout_ptr_old() const { @@ -100,7 +100,7 @@ class PatchScheduler { throw shambase::make_except_with_loc( "get_layout_ptr_old is not supported for multiple layers"); } - return ref.get_layer_ptr("main"); + return ref.get_layer_ptr(0); } /** diff --git a/src/shamrock/include/shamrock/scheduler/ShamrockCtx.hpp b/src/shamrock/include/shamrock/scheduler/ShamrockCtx.hpp index dfe3126da5..3d12454f16 100644 --- a/src/shamrock/include/shamrock/scheduler/ShamrockCtx.hpp +++ b/src/shamrock/include/shamrock/scheduler/ShamrockCtx.hpp @@ -48,9 +48,7 @@ class ShamrockCtx { if (sched) { throw ShamAPIException("cannot modify patch data layout while the scheduler is on"); } - pdl = std::make_shared(); - pdl->layer_layouts.emplace( - "main", std::make_shared()); + pdl = std::make_shared(std::vector{"main"}); } // inline void pdata_layout_do_double_prec_mode(){ diff --git a/src/shamrock/src/io/ShamrockDump.cpp b/src/shamrock/src/io/ShamrockDump.cpp index 3531627a79..64cfa5d087 100644 --- a/src/shamrock/src/io/ShamrockDump.cpp +++ b/src/shamrock/src/io/ShamrockDump.cpp @@ -163,6 +163,11 @@ namespace shamrock { StackEntry stack_loc{}; + if (shambase::get_check_ref(ctx.pdl).get_layer_count() > 1) { + throw shambase::make_except_with_loc( + "load_shamrock_dump is not supported for multiple layers"); + } + u64 head_ptr = 0; MPI_File mfile{}; @@ -247,7 +252,7 @@ namespace shamrock { shamsys::instance::get_compute_scheduler_ptr(), std::move(out)); patch::PatchDataLayer pdat = patch::PatchDataLayer::deserialize_buf( - ser, shambase::get_check_ref(ctx.pdl).get_layer_ptr("main")); + ser, shambase::get_check_ref(ctx.pdl).get_layer_ptr(0)); sched.patch_data.owned_data.add_obj(pid, std::move(pdat)); } diff --git a/src/shamrock/src/scheduler/PatchScheduler.cpp b/src/shamrock/src/scheduler/PatchScheduler.cpp index f2cca49fce..896fa24b1f 100644 --- a/src/shamrock/src/scheduler/PatchScheduler.cpp +++ b/src/shamrock/src/scheduler/PatchScheduler.cpp @@ -212,9 +212,14 @@ PatchScheduler::PatchScheduler( u64 crit_merge) : pdl_ptr(pdl_ptr), patch_data( - pdl_ptr->get_layer_ptr("main"), + pdl_ptr->get_layer_ptr(0), {{0, 0, 0}, {max_axis_patch_coord, max_axis_patch_coord, max_axis_patch_coord}}) { + if (pdl_ptr->get_layer_count() > 1) { + throw shambase::make_except_with_loc( + "PatchScheduler is not supported for multiple layers"); + } + crit_patch_split = crit_split; crit_patch_merge = crit_merge; } diff --git a/src/tests/benchmark_selfgrav.cpp b/src/tests/benchmark_selfgrav.cpp index 4df4adf21e..49a6fe1b65 100644 --- a/src/tests/benchmark_selfgrav.cpp +++ b/src/tests/benchmark_selfgrav.cpp @@ -33,7 +33,7 @@ std::tuple benchmark_selfgrav(f32 dr, u32 npatch) { std::shared_ptr pdl_ptr = std::make_shared(); - auto &pdl = pdl_ptr->get_layer_ref("main"); + auto &pdl = pdl_ptr->get_layer_ref(0); pdl.add_field("xyz", 1); pdl.add_field("hpart", 1); diff --git a/src/tests/shamrock_article_1Tests.cpp b/src/tests/shamrock_article_1Tests.cpp index c3e437332e..5fea8fe5dd 100644 --- a/src/tests/shamrock_article_1Tests.cpp +++ b/src/tests/shamrock_article_1Tests.cpp @@ -489,7 +489,7 @@ f64 amr_walk_perf( using namespace shamrock::scheduler; std::shared_ptr layout_ptr = std::make_shared(); - auto &layout = layout_ptr->get_layer_ref("main"); + auto &layout = layout_ptr->get_layer_ref(0); layout.add_field("cell_min", 1); layout.add_field("cell_max", 1); PatchScheduler sched(layout_ptr, 1e9, 1); From 98e3e7d0321d48db5d7d4553921f53eedf9ab89f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20David--Cl=C3=A9ris?= Date: Sat, 10 Jan 2026 11:27:05 +0100 Subject: [PATCH 06/15] noicer --- src/tests/benchmark_selfgrav.cpp | 2 +- src/tests/shamrock_article_1Tests.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/tests/benchmark_selfgrav.cpp b/src/tests/benchmark_selfgrav.cpp index 49a6fe1b65..2e2ee44a08 100644 --- a/src/tests/benchmark_selfgrav.cpp +++ b/src/tests/benchmark_selfgrav.cpp @@ -32,7 +32,7 @@ std::tuple benchmark_selfgrav(f32 dr, u32 npatch) { u64 Nesti = (2.F / dr) * (2.F / dr) * (2.F / dr); std::shared_ptr pdl_ptr - = std::make_shared(); + = std::make_shared(std::vector{"main"}); auto &pdl = pdl_ptr->get_layer_ref(0); pdl.add_field("xyz", 1); diff --git a/src/tests/shamrock_article_1Tests.cpp b/src/tests/shamrock_article_1Tests.cpp index 5fea8fe5dd..a3081dc421 100644 --- a/src/tests/shamrock_article_1Tests.cpp +++ b/src/tests/shamrock_article_1Tests.cpp @@ -488,8 +488,9 @@ f64 amr_walk_perf( using namespace shamrock::patch; using namespace shamrock::scheduler; - std::shared_ptr layout_ptr = std::make_shared(); - auto &layout = layout_ptr->get_layer_ref(0); + std::shared_ptr layout_ptr + = std::make_shared(std::vector{"main"}); + auto &layout = layout_ptr->get_layer_ref(0); layout.add_field("cell_min", 1); layout.add_field("cell_max", 1); PatchScheduler sched(layout_ptr, 1e9, 1); From 05532ccd573bbe9680eb44b065aed67ac64fafb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20David--Cl=C3=A9ris?= Date: Sun, 11 Jan 2026 15:01:11 +0100 Subject: [PATCH 07/15] it works --- .../shamrock/patch/PatchDataLayout.hpp | 30 +++---- src/shamrock/src/patch/PatchDataLayout.cpp | 68 ++++++++++++++++ .../patch/PatchDataLayerLayoutTests.cpp | 2 +- .../shamrock/patch/PatchDataLayoutTests.cpp | 81 +++++++++++++++++++ 4 files changed, 162 insertions(+), 19 deletions(-) create mode 100644 src/shamrock/src/patch/PatchDataLayout.cpp create mode 100644 src/tests/shamrock/patch/PatchDataLayoutTests.cpp diff --git a/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp b/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp index bc50e581ac..3e1db79d6b 100644 --- a/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp +++ b/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp @@ -33,6 +33,12 @@ namespace shamrock::patch { struct LayerEntry { std::shared_ptr layout; std::string name; + + inline friend bool operator==(const LayerEntry &lhs, const LayerEntry &rhs) { + return lhs.name == rhs.name + && shambase::get_check_ref(lhs.layout) + == shambase::get_check_ref(rhs.layout); + } }; std::vector layer_layouts; @@ -86,6 +92,10 @@ namespace shamrock::patch { inline PatchDataLayerLayout &get_layer_ref(const std::string &name) { return get_layer_ref(get_layer_index(name)); } + + inline friend bool operator==(const PatchDataLayout &lhs, const PatchDataLayout &rhs) { + return lhs.layer_layouts == rhs.layer_layouts; + } }; /** @@ -97,19 +107,7 @@ namespace shamrock::patch { * @param j The JSON object to serialize the PatchDataLayout object to * @param p The PatchDataLayout object to serialize */ - inline void to_json(nlohmann::json &j, const PatchDataLayout &p) { - using json = nlohmann::json; - std::vector layer_entries; - - for (const auto &layer_entry : p.layer_layouts) { - - json layer_json; - to_json(layer_json, shambase::get_check_ref(layer_entry.layout)); - layer_entries.push_back(json{{"name", layer_entry.name}, {"layout", layer_json}}); - } - - j = layer_entries; - } + void to_json(nlohmann::json &j, const PatchDataLayout &p); /** * @brief Deserialize a PatchDataLayout object from a JSON object @@ -120,10 +118,6 @@ namespace shamrock::patch { * @param j The JSON object to deserialize the PatchDataLayout object from * @param p The PatchDataLayout object to deserialize */ - inline void from_json(const nlohmann::json &j, PatchDataLayout &p) { - p.layer_layouts.clear(); - - logger::raw_ln(j.dump(4)); - } + void from_json(const nlohmann::json &j, PatchDataLayout &p); } // namespace shamrock::patch diff --git a/src/shamrock/src/patch/PatchDataLayout.cpp b/src/shamrock/src/patch/PatchDataLayout.cpp new file mode 100644 index 0000000000..223269aaba --- /dev/null +++ b/src/shamrock/src/patch/PatchDataLayout.cpp @@ -0,0 +1,68 @@ +// -------------------------------------------------------// +// +// SHAMROCK code for hydrodynamics +// Copyright (c) 2021-2025 Timothée David--Cléris +// SPDX-License-Identifier: CeCILL Free Software License Agreement v2.1 +// Shamrock is licensed under the CeCILL 2.1 License, see LICENSE for more information +// +// -------------------------------------------------------// + +/** + * @file PatchDataLayout.cpp + * @author Timothée David--Cléris (tim.shamrock@proton.me) + * @author Yona Lapeyre (yona.lapeyre@ens-lyon.fr) --no git blame-- + * @brief + */ + +#include "shamrock/patch/PatchDataLayout.hpp" + +namespace shamrock::patch { + + void to_json(nlohmann::json &j, const PatchDataLayout &p) { + using json = nlohmann::json; + std::vector layer_entries; + + for (const auto &layer_entry : p.layer_layouts) { + json layer_json; + to_json(layer_json, shambase::get_check_ref(layer_entry.layout)); + layer_entries.push_back(json{{"name", layer_entry.name}, {"layout", layer_json}}); + } + + j = layer_entries; + } + + void from_json(const nlohmann::json &j, PatchDataLayout &p) { + p.layer_layouts.clear(); + using json = nlohmann::json; + + try { + + std::vector layer_entries = j.get>(); + + for (const auto &layer_entry : layer_entries) { + std::string name = layer_entry["name"].get(); + PatchDataLayerLayout layout = layer_entry["layout"].get(); + p.layer_layouts.push_back( + PatchDataLayout::LayerEntry{ + std::make_shared(layout), name}); + } + } catch (const json::exception &e) { + logger::warn_ln( + "PatchDataLayout", + shambase::format( + "failed to deserialize PatchDataLayout from JSON, try to " + "deserialize as single layer :\n error : {}\n json : {}\n", + e.what(), + j.dump(4))); + + PatchDataLayerLayout pdl_layer; + from_json(j, pdl_layer); + p.layer_layouts.push_back( + PatchDataLayout::LayerEntry{ + std::make_shared(pdl_layer), "main"}); + + logger::warn_ln("PatchDataLayout", "successfuly deserialized as single layer"); + } + } + +} // namespace shamrock::patch diff --git a/src/tests/shamrock/patch/PatchDataLayerLayoutTests.cpp b/src/tests/shamrock/patch/PatchDataLayerLayoutTests.cpp index 7357bafe5a..a72a20c320 100644 --- a/src/tests/shamrock/patch/PatchDataLayerLayoutTests.cpp +++ b/src/tests/shamrock/patch/PatchDataLayerLayoutTests.cpp @@ -10,7 +10,7 @@ #include "shamrock/patch/PatchDataLayerLayout.hpp" #include "shamtest/shamtest.hpp" -TestStart(Unittest, "shamrock/patch/PatchDataLayerLayout::serialize_json", testpdlserjson, 1) { +TestStart(Unittest, "shamrock/patch/PatchDataLayerLayout::serialize_json", testpdllayerserjson, 1) { using namespace shamrock::patch; PatchDataLayerLayout pdl; diff --git a/src/tests/shamrock/patch/PatchDataLayoutTests.cpp b/src/tests/shamrock/patch/PatchDataLayoutTests.cpp new file mode 100644 index 0000000000..d9470230af --- /dev/null +++ b/src/tests/shamrock/patch/PatchDataLayoutTests.cpp @@ -0,0 +1,81 @@ +// -------------------------------------------------------// +// +// SHAMROCK code for hydrodynamics +// Copyright (c) 2021-2025 Timothée David--Cléris +// SPDX-License-Identifier: CeCILL Free Software License Agreement v2.1 +// Shamrock is licensed under the CeCILL 2.1 License, see LICENSE for more information +// +// -------------------------------------------------------// + +#include "shamrock/patch/PatchDataLayout.hpp" +#include "shamtest/shamtest.hpp" + +TestStart(Unittest, "shamrock/patch/PatchDataLayout::serialize_json", testpdlserjson, 1) { + using namespace shamrock::patch; + + PatchDataLayout pdl = PatchDataLayout(std::vector{"layer1", "layer2", "layer3"}); + + auto &layer1 = pdl.get_layer_ref(0); + auto &layer2 = pdl.get_layer_ref(1); + auto &layer3 = pdl.get_layer_ref(2); + + layer1.add_field("f32", 1); + layer1.add_field("f32_2", 1); + layer1.add_field("f32_3", 1); + layer1.add_field("f32_3'", 1); + + layer2.add_field("f32_3''", 1); + layer2.add_field("f32_4", 1); + layer2.add_field("f32_8", 1); + layer2.add_field("f32_16", 1); + layer2.add_field("f64", 1); + + layer3.add_field("f64_2", 1); + layer3.add_field("f64_3", 1); + layer3.add_field("f64_4", 2); + layer3.add_field("f64_8", 1); + layer3.add_field("f64_16", 1); + layer3.add_field("u32", 1); + layer3.add_field("u64", 1); + + nlohmann::json j = pdl; + + logger::raw_ln(j.dump(4)); + + PatchDataLayout pdl_out = j.get(); + + REQUIRE(pdl == pdl_out); +} + +// this test is necessary to ensure backward compatibility before layers were introduced +TestStart( + Unittest, + "shamrock/patch/PatchDataLayout::deserialize_json_from_layer", + testpdlserjsonfromlayer, + 1) { + using namespace shamrock::patch; + + PatchDataLayerLayout pdl_layer; + pdl_layer.add_field("f32", 1); + pdl_layer.add_field("f32_2", 1); + pdl_layer.add_field("f32_3", 1); + pdl_layer.add_field("f32_3'", 1); + + pdl_layer.add_field("f32_3''", 1); + pdl_layer.add_field("f32_4", 1); + pdl_layer.add_field("f32_8", 1); + pdl_layer.add_field("f32_16", 1); + pdl_layer.add_field("f64", 1); + + nlohmann::json j = pdl_layer; + + logger::raw_ln(j.dump(4)); + + PatchDataLayout pdl_layer_out = j.get(); + + PatchDataLayout pdl_ref = PatchDataLayout(); + pdl_ref.layer_layouts.push_back( + PatchDataLayout::LayerEntry{std::make_shared(pdl_layer), "main"}); + + REQUIRE(pdl_ref == pdl_layer_out); +} From 528b839e5d459837ac582d6276b8581b8788262d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20David--Cl=C3=A9ris?= Date: Sun, 11 Jan 2026 17:49:05 +0100 Subject: [PATCH 08/15] fix --- src/shamrock/src/patch/PatchDataLayout.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/shamrock/src/patch/PatchDataLayout.cpp b/src/shamrock/src/patch/PatchDataLayout.cpp index 223269aaba..2e193c619d 100644 --- a/src/shamrock/src/patch/PatchDataLayout.cpp +++ b/src/shamrock/src/patch/PatchDataLayout.cpp @@ -40,8 +40,8 @@ namespace shamrock::patch { std::vector layer_entries = j.get>(); for (const auto &layer_entry : layer_entries) { - std::string name = layer_entry["name"].get(); - PatchDataLayerLayout layout = layer_entry["layout"].get(); + std::string name = layer_entry.at("name").get(); + PatchDataLayerLayout layout = layer_entry.at("layout").get(); p.layer_layouts.push_back( PatchDataLayout::LayerEntry{ std::make_shared(layout), name}); From 1370bd58d746d005050fe187fb801f3e908e6af5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David--Cl=C3=A9ris=20Timoth=C3=A9e?= Date: Tue, 27 Jan 2026 17:33:45 +0100 Subject: [PATCH 09/15] Update src/shamrock/include/shamrock/patch/PatchDataLayout.hpp --- src/shamrock/include/shamrock/patch/PatchDataLayout.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp b/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp index 3e1db79d6b..b7e408d2d1 100644 --- a/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp +++ b/src/shamrock/include/shamrock/patch/PatchDataLayout.hpp @@ -1,7 +1,7 @@ // -------------------------------------------------------// // // SHAMROCK code for hydrodynamics -// Copyright (c) 2021-2025 Timothée David--Cléris +// Copyright (c) 2021-2026 Timothée David--Cléris // SPDX-License-Identifier: CeCILL Free Software License Agreement v2.1 // Shamrock is licensed under the CeCILL 2.1 License, see LICENSE for more information // From 305114d459341b6540c4a4bc983450ef47220670 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David--Cl=C3=A9ris=20Timoth=C3=A9e?= Date: Tue, 27 Jan 2026 22:23:41 +0100 Subject: [PATCH 10/15] Update src/tests/shamrock/patch/PatchDataLayoutTests.cpp --- src/tests/shamrock/patch/PatchDataLayoutTests.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tests/shamrock/patch/PatchDataLayoutTests.cpp b/src/tests/shamrock/patch/PatchDataLayoutTests.cpp index d9470230af..68c35fc80c 100644 --- a/src/tests/shamrock/patch/PatchDataLayoutTests.cpp +++ b/src/tests/shamrock/patch/PatchDataLayoutTests.cpp @@ -1,7 +1,7 @@ // -------------------------------------------------------// // // SHAMROCK code for hydrodynamics -// Copyright (c) 2021-2025 Timothée David--Cléris +// Copyright (c) 2021-2026 Timothée David--Cléris // SPDX-License-Identifier: CeCILL Free Software License Agreement v2.1 // Shamrock is licensed under the CeCILL 2.1 License, see LICENSE for more information // From cf7fc6b5f2b3077c30539a1f892acde89696ffc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David--Cl=C3=A9ris=20Timoth=C3=A9e?= Date: Tue, 27 Jan 2026 22:23:48 +0100 Subject: [PATCH 11/15] Update src/shamrock/src/patch/PatchDataLayout.cpp --- src/shamrock/src/patch/PatchDataLayout.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shamrock/src/patch/PatchDataLayout.cpp b/src/shamrock/src/patch/PatchDataLayout.cpp index 2e193c619d..51e26ffbc4 100644 --- a/src/shamrock/src/patch/PatchDataLayout.cpp +++ b/src/shamrock/src/patch/PatchDataLayout.cpp @@ -1,7 +1,7 @@ // -------------------------------------------------------// // // SHAMROCK code for hydrodynamics -// Copyright (c) 2021-2025 Timothée David--Cléris +// Copyright (c) 2021-2026 Timothée David--Cléris // SPDX-License-Identifier: CeCILL Free Software License Agreement v2.1 // Shamrock is licensed under the CeCILL 2.1 License, see LICENSE for more information // From 9f6b209a2e7eb8013578f449a5c8d5f9f51604ee Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 29 Jan 2026 16:06:37 +0000 Subject: [PATCH 12/15] [gh-action] trigger CI with empty commit From fdbd39cf8f8d7c533091d4a52eec50df66db552a Mon Sep 17 00:00:00 2001 From: Anass Serhani Date: Thu, 26 Feb 2026 15:23:00 +0100 Subject: [PATCH 13/15] bugfixed by using shamrock namespace --- src/shampylib/src/pyShamrockCtx.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/shampylib/src/pyShamrockCtx.cpp b/src/shampylib/src/pyShamrockCtx.cpp index dba02670fe..d9421a0289 100644 --- a/src/shampylib/src/pyShamrockCtx.cpp +++ b/src/shampylib/src/pyShamrockCtx.cpp @@ -107,6 +107,7 @@ Register_pymod(pyshamrockctxinit) { "collect_data is not supported for multiple layers"); } + using namespace shamrock; for (auto fname : ctx.pdl->get_layer_ref(0).get_field_names()) { append_to_map(fname, data, dic_out); append_to_map(fname, data, dic_out); From 755eddc47c1680c01e4ffcd611e229e64917e3f1 Mon Sep 17 00:00:00 2001 From: Anass Serhani Date: Thu, 26 Feb 2026 15:23:54 +0100 Subject: [PATCH 14/15] got main layer ref --- src/shammodels/ramses/include/shammodels/ramses/Solver.hpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/shammodels/ramses/include/shammodels/ramses/Solver.hpp b/src/shammodels/ramses/include/shammodels/ramses/Solver.hpp index 34bb9c69a4..09c06a619b 100644 --- a/src/shammodels/ramses/include/shammodels/ramses/Solver.hpp +++ b/src/shammodels/ramses/include/shammodels/ramses/Solver.hpp @@ -49,7 +49,9 @@ namespace shammodels::basegodunov { SolverStorage storage{}; - inline void init_required_fields() { solver_config.set_layout(context.get_pdl_write()); } + inline void init_required_fields() { + solver_config.set_layout(context.get_pdl_write().get_layer_ref("main")); + } Solver(ShamrockCtx &context) : context(context) {} From c0fb6bd03b534f787fedd7f2337d562d7d029e07 Mon Sep 17 00:00:00 2001 From: Anass Serhani Date: Mon, 20 Apr 2026 14:44:18 +0200 Subject: [PATCH 15/15] homogenized main layer index-label --- src/shammodels/gsph/include/shammodels/gsph/Solver.hpp | 2 +- src/shammodels/sph/include/shammodels/sph/Solver.hpp | 2 +- src/shampylib/src/pyShamrockCtx.cpp | 2 +- src/shamrock/src/io/ShamrockDump.cpp | 2 +- src/shamrock/src/scheduler/PatchScheduler.cpp | 2 +- src/tests/benchmark_selfgrav.cpp | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp b/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp index 330b2ec88c..70ecb41dda 100644 --- a/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp +++ b/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp @@ -86,7 +86,7 @@ namespace shammodels::gsph { sph::SolverLog solve_logs; inline void init_required_fields() { - solver_config.set_layout(context.get_pdl_write().get_layer_ref(0)); + solver_config.set_layout(context.get_pdl_write().get_layer_ref("main")); } // Serial patch tree control diff --git a/src/shammodels/sph/include/shammodels/sph/Solver.hpp b/src/shammodels/sph/include/shammodels/sph/Solver.hpp index 8ae9e19b25..4444d7b225 100644 --- a/src/shammodels/sph/include/shammodels/sph/Solver.hpp +++ b/src/shammodels/sph/include/shammodels/sph/Solver.hpp @@ -76,7 +76,7 @@ namespace shammodels::sph { SolverLog solve_logs; inline void init_required_fields() { - solver_config.set_layout(context.get_pdl_write().get_layer_ref(0)); + solver_config.set_layout(context.get_pdl_write().get_layer_ref("main")); } // serial patch tree control diff --git a/src/shampylib/src/pyShamrockCtx.cpp b/src/shampylib/src/pyShamrockCtx.cpp index d9421a0289..54e4129525 100644 --- a/src/shampylib/src/pyShamrockCtx.cpp +++ b/src/shampylib/src/pyShamrockCtx.cpp @@ -108,7 +108,7 @@ Register_pymod(pyshamrockctxinit) { } using namespace shamrock; - for (auto fname : ctx.pdl->get_layer_ref(0).get_field_names()) { + for (auto fname : ctx.pdl->get_layer_ref("main").get_field_names()) { append_to_map(fname, data, dic_out); append_to_map(fname, data, dic_out); append_to_map(fname, data, dic_out); diff --git a/src/shamrock/src/io/ShamrockDump.cpp b/src/shamrock/src/io/ShamrockDump.cpp index c37fe134a8..5efa9f3c36 100644 --- a/src/shamrock/src/io/ShamrockDump.cpp +++ b/src/shamrock/src/io/ShamrockDump.cpp @@ -252,7 +252,7 @@ namespace shamrock { shamsys::instance::get_compute_scheduler_ptr(), std::move(out)); patch::PatchDataLayer pdat = patch::PatchDataLayer::deserialize_buf( - ser, shambase::get_check_ref(ctx.pdl).get_layer_ptr(0)); + ser, shambase::get_check_ref(ctx.pdl).get_layer_ptr("main")); sched.patch_data.owned_data.add_obj(pid, std::move(pdat)); } diff --git a/src/shamrock/src/scheduler/PatchScheduler.cpp b/src/shamrock/src/scheduler/PatchScheduler.cpp index 0762fd4ad6..397df573c0 100644 --- a/src/shamrock/src/scheduler/PatchScheduler.cpp +++ b/src/shamrock/src/scheduler/PatchScheduler.cpp @@ -212,7 +212,7 @@ PatchScheduler::PatchScheduler( u64 crit_merge) : pdl_ptr(pdl_ptr), patch_data( - pdl_ptr->get_layer_ptr(0), + pdl_ptr->get_layer_ptr("main"), {{0, 0, 0}, {max_axis_patch_coord, max_axis_patch_coord, max_axis_patch_coord}}) { if (pdl_ptr->get_layer_count() > 1) { diff --git a/src/tests/benchmark_selfgrav.cpp b/src/tests/benchmark_selfgrav.cpp index 71c3e0d059..e243367af6 100644 --- a/src/tests/benchmark_selfgrav.cpp +++ b/src/tests/benchmark_selfgrav.cpp @@ -33,7 +33,7 @@ std::tuple benchmark_selfgrav(f32 dr, u32 npatch) { std::shared_ptr pdl_ptr = std::make_shared(std::vector{"main"}); - auto &pdl = pdl_ptr->get_layer_ref(0); + auto &pdl = pdl_ptr->get_layer_ref("main"); pdl.add_field("xyz", 1); pdl.add_field("hpart", 1);