From 668b401107abb9f2a5989ff98ec06914616a5065 Mon Sep 17 00:00:00 2001 From: Guo-astro Date: Fri, 23 Jan 2026 20:07:39 +0900 Subject: [PATCH 1/3] [GSPH] add SerialPatchTreeRefEdge for solvergraph integration Use existing SerialPatchTreeRefEdge from shamrock/solvergraph/ to register the serial patch tree in the solver graph for explicit data dependency tracking. Changes: - Add solver_graph and serial_patch_tree_ref edge to SolverStorage - Register edge in init_solver_graph() - Set reference in gen_serial_patch_tree() after tree is built - Clear reference in reset_serial_patch_tree() The tree storage remains as Component> while the solvergraph edge holds a reference for dependency tracking. --- .../gsph/include/shammodels/gsph/Solver.hpp | 5 ++++- .../include/shammodels/gsph/modules/SolverStorage.hpp | 11 ++++++++++- src/shammodels/gsph/src/Solver.cpp | 9 +++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp b/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp index a1b9c54c24..d864d916e4 100644 --- a/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp +++ b/src/shammodels/gsph/include/shammodels/gsph/Solver.hpp @@ -89,7 +89,10 @@ namespace shammodels::gsph { // Serial patch tree control void gen_serial_patch_tree(); - inline void reset_serial_patch_tree() { storage.serial_patch_tree.reset(); } + inline void reset_serial_patch_tree() { + shambase::get_check_ref(storage.serial_patch_tree_ref).free_alloc(); + storage.serial_patch_tree.reset(); + } // Ghost handling - use GSPH ghost handler with Newtonian field names using GhostHandle = GSPHGhostHandler; diff --git a/src/shammodels/gsph/include/shammodels/gsph/modules/SolverStorage.hpp b/src/shammodels/gsph/include/shammodels/gsph/modules/SolverStorage.hpp index 0a4ee8cd88..ebc4fd852e 100644 --- a/src/shammodels/gsph/include/shammodels/gsph/modules/SolverStorage.hpp +++ b/src/shammodels/gsph/include/shammodels/gsph/modules/SolverStorage.hpp @@ -36,6 +36,7 @@ #include "shamrock/solvergraph/FieldRefs.hpp" #include "shamrock/solvergraph/Indexes.hpp" #include "shamrock/solvergraph/ScalarsEdge.hpp" +#include "shamrock/solvergraph/SerialPatchTreeEdge.hpp" #include "shamrock/solvergraph/SolverGraph.hpp" #include "shamsys/legacy/log.hpp" #include "shamtree/CompressedLeafBVH.hpp" @@ -74,6 +75,7 @@ namespace shammodels::gsph { shamrock::solvergraph::SolverGraph solver_graph; + /// Particle counts per patch std::shared_ptr> part_counts; std::shared_ptr> part_counts_with_ghost; @@ -88,7 +90,14 @@ namespace shammodels::gsph { /// Patch rank ownership std::shared_ptr> patch_rank_owner; - /// Serial patch tree for load balancing + /// Serial patch tree reference for solvergraph dependency tracking + std::shared_ptr> serial_patch_tree_ref; + + // ===================================================================== + // Component storage (tree storage, migrate to solvergraph later) + // ===================================================================== + + /// Serial patch tree for load balancing (actual storage) Component> serial_patch_tree; /// Ghost handler for boundary particles diff --git a/src/shammodels/gsph/src/Solver.cpp b/src/shammodels/gsph/src/Solver.cpp index f076e76fab..c8d893f6f5 100644 --- a/src/shammodels/gsph/src/Solver.cpp +++ b/src/shammodels/gsph/src/Solver.cpp @@ -91,6 +91,12 @@ void shammodels::gsph::Solver::init_solver_graph() { storage.ghost_handler = storage.solver_graph.register_edge( "ghost_handler", solvergraph::GhostHandlerEdge("ghost_handler", "\\mathcal{G}")); + // Register serial patch tree reference edge for dependency tracking + storage.serial_patch_tree_ref = storage.solver_graph.register_edge( + "serial_patch_tree", + shamrock::solvergraph::SerialPatchTreeRefEdge( + "serial_patch_tree", "\\mathcal{T}_{\\rm patch}")); + storage.omega = std::make_shared>(1, "omega", "\\Omega"); storage.density = std::make_shared>(1, "density", "\\rho"); storage.pressure = std::make_shared>(1, "pressure", "P"); @@ -125,6 +131,9 @@ void shammodels::gsph::Solver::gen_serial_patch_tree() { SerialPatchTree _sptree = SerialPatchTree::build(scheduler()); _sptree.attach_buf(); storage.serial_patch_tree.set(std::move(_sptree)); + + // Set solvergraph edge reference to the stored tree + shambase::get_check_ref(storage.serial_patch_tree_ref).patch_tree = storage.serial_patch_tree.get(); } template class Kern> From 3a586d7cd2e094d30ae7f14c7d65a5542fa1e03a Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Fri, 23 Jan 2026 11:09:25 +0000 Subject: [PATCH 2/3] [autofix.ci] automatic fix: pre-commit hooks --- src/shammodels/gsph/src/Solver.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/shammodels/gsph/src/Solver.cpp b/src/shammodels/gsph/src/Solver.cpp index c8d893f6f5..548626a8f5 100644 --- a/src/shammodels/gsph/src/Solver.cpp +++ b/src/shammodels/gsph/src/Solver.cpp @@ -133,7 +133,8 @@ void shammodels::gsph::Solver::gen_serial_patch_tree() { storage.serial_patch_tree.set(std::move(_sptree)); // Set solvergraph edge reference to the stored tree - shambase::get_check_ref(storage.serial_patch_tree_ref).patch_tree = storage.serial_patch_tree.get(); + shambase::get_check_ref(storage.serial_patch_tree_ref).patch_tree + = storage.serial_patch_tree.get(); } template class Kern> From f77f8b211e0cfbdbd7aadcb5e2f9ebb09007640e Mon Sep 17 00:00:00 2001 From: Guo-astro Date: Sun, 25 Jan 2026 09:14:54 +0900 Subject: [PATCH 3/3] Remove gratuitous doc changes per maintainer feedback --- .../include/shammodels/gsph/modules/SolverStorage.hpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/shammodels/gsph/include/shammodels/gsph/modules/SolverStorage.hpp b/src/shammodels/gsph/include/shammodels/gsph/modules/SolverStorage.hpp index ebc4fd852e..629ac7fd74 100644 --- a/src/shammodels/gsph/include/shammodels/gsph/modules/SolverStorage.hpp +++ b/src/shammodels/gsph/include/shammodels/gsph/modules/SolverStorage.hpp @@ -75,7 +75,6 @@ namespace shammodels::gsph { shamrock::solvergraph::SolverGraph solver_graph; - /// Particle counts per patch std::shared_ptr> part_counts; std::shared_ptr> part_counts_with_ghost; @@ -90,14 +89,9 @@ namespace shammodels::gsph { /// Patch rank ownership std::shared_ptr> patch_rank_owner; - /// Serial patch tree reference for solvergraph dependency tracking std::shared_ptr> serial_patch_tree_ref; - // ===================================================================== - // Component storage (tree storage, migrate to solvergraph later) - // ===================================================================== - - /// Serial patch tree for load balancing (actual storage) + /// Serial patch tree for load balancing Component> serial_patch_tree; /// Ghost handler for boundary particles