peclet-core 1.3.2__tar.gz → 1.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. {peclet_core-1.3.2 → peclet_core-1.4.0}/CITATION.cff +1 -1
  2. {peclet_core-1.3.2 → peclet_core-1.4.0}/CLAUDE.md +21 -1
  3. {peclet_core-1.3.2 → peclet_core-1.4.0}/PKG-INFO +6 -3
  4. {peclet_core-1.3.2 → peclet_core-1.4.0}/README.md +5 -2
  5. {peclet_core-1.3.2 → peclet_core-1.4.0}/docs/Doxyfile +1 -1
  6. peclet_core-1.4.0/include/peclet/core/solver/anderson.hpp +892 -0
  7. peclet_core-1.4.0/include/peclet/core/solver/anderson_mpi.hpp +34 -0
  8. {peclet_core-1.3.2 → peclet_core-1.4.0}/packaging/pyproject-core.toml +1 -1
  9. {peclet_core-1.3.2 → peclet_core-1.4.0}/pyproject.toml +1 -1
  10. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/CMakeLists.txt +18 -0
  11. peclet_core-1.4.0/tests/anderson_test_maps.hpp +96 -0
  12. peclet_core-1.4.0/tests/test_anderson.cpp +832 -0
  13. peclet_core-1.4.0/tests/test_anderson_mpi.cpp +248 -0
  14. {peclet_core-1.3.2 → peclet_core-1.4.0}/.clang-format +0 -0
  15. {peclet_core-1.3.2 → peclet_core-1.4.0}/.clang-tidy +0 -0
  16. {peclet_core-1.3.2 → peclet_core-1.4.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  17. {peclet_core-1.3.2 → peclet_core-1.4.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  18. {peclet_core-1.3.2 → peclet_core-1.4.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  19. {peclet_core-1.3.2 → peclet_core-1.4.0}/.github/dependabot.yml +0 -0
  20. {peclet_core-1.3.2 → peclet_core-1.4.0}/.github/workflows/ci.yml +0 -0
  21. {peclet_core-1.3.2 → peclet_core-1.4.0}/.github/workflows/docs.yml +0 -0
  22. {peclet_core-1.3.2 → peclet_core-1.4.0}/.github/workflows/quality.yml +0 -0
  23. {peclet_core-1.3.2 → peclet_core-1.4.0}/.github/workflows/release.yml +0 -0
  24. {peclet_core-1.3.2 → peclet_core-1.4.0}/.gitignore +0 -0
  25. {peclet_core-1.3.2 → peclet_core-1.4.0}/CMakeLists.txt +0 -0
  26. {peclet_core-1.3.2 → peclet_core-1.4.0}/LICENSE +0 -0
  27. {peclet_core-1.3.2 → peclet_core-1.4.0}/benchmarks/CMakeLists.txt +0 -0
  28. {peclet_core-1.3.2 → peclet_core-1.4.0}/benchmarks/bench_halo.cpp +0 -0
  29. {peclet_core-1.3.2 → peclet_core-1.4.0}/cmake/PecletCorePinMpiexec.cmake +0 -0
  30. {peclet_core-1.3.2 → peclet_core-1.4.0}/cmake/PecletCoreTest.cmake +0 -0
  31. {peclet_core-1.3.2 → peclet_core-1.4.0}/cmake/SuiteNanobind.cmake +0 -0
  32. {peclet_core-1.3.2 → peclet_core-1.4.0}/cmake/peclet-coreConfig.cmake.in +0 -0
  33. {peclet_core-1.3.2 → peclet_core-1.4.0}/docs/archive/README.md +0 -0
  34. {peclet_core-1.3.2 → peclet_core-1.4.0}/docs/archive/cuda-aware-mpi.md +0 -0
  35. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/common/cpu_budget.hpp +0 -0
  36. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/common/host_parallel.hpp +0 -0
  37. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/common/mpi.hpp +0 -0
  38. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/common/mpi_stub.hpp +0 -0
  39. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/common/portable.hpp +0 -0
  40. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/common/types.hpp +0 -0
  41. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/common/view.hpp +0 -0
  42. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/decomp/block_decomposer.hpp +0 -0
  43. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/decomp/block_indexer.hpp +0 -0
  44. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/decomp/gather_by_global_id.hpp +0 -0
  45. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/decomp/grid_redistribute.hpp +0 -0
  46. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/decomp/morton_indexer.hpp +0 -0
  47. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/decomp/redistribute_topology.hpp +0 -0
  48. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/decomp/stage_comm.hpp +0 -0
  49. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/decomp/stage_target.hpp +0 -0
  50. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/domain.hpp +0 -0
  51. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/field/field_set.hpp +0 -0
  52. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/geom/body_properties.hpp +0 -0
  53. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/geom/device_scene.hpp +0 -0
  54. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/geom/grid_sdf.hpp +0 -0
  55. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/geom/primitives.hpp +0 -0
  56. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/geom/quadrature.hpp +0 -0
  57. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/geom/scene.hpp +0 -0
  58. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/geom/scene_builder.hpp +0 -0
  59. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/geom/scene_query.hpp +0 -0
  60. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/geom/sdf.hpp +0 -0
  61. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/geom/vti_io.hpp +0 -0
  62. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/halo/grid_halo.hpp +0 -0
  63. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/halo/grid_halo_topology.hpp +0 -0
  64. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/halo/nbx.hpp +0 -0
  65. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/halo/particle_halo.hpp +0 -0
  66. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/halo/particle_halo_topology.hpp +0 -0
  67. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/halo/particle_migrator.hpp +0 -0
  68. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/halo/particle_migrator_view.hpp +0 -0
  69. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/halo/particle_rebalance.hpp +0 -0
  70. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/interp/particle_grid.hpp +0 -0
  71. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/python/kokkos_teardown.hpp +0 -0
  72. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/python/ndarray_interop.hpp +0 -0
  73. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/scheme/cut_cell_closure.hpp +0 -0
  74. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/scheme/ghost_closure.hpp +0 -0
  75. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/solver/coloring.hpp +0 -0
  76. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/solver/csr_bicgstab.hpp +0 -0
  77. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/solver/csr_operator.hpp +0 -0
  78. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/solver/face_csr.hpp +0 -0
  79. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/solver/graph_amg.hpp +0 -0
  80. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/solver/graph_amg_device.hpp +0 -0
  81. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/solver/vector_ops.hpp +0 -0
  82. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/vof/curvature.hpp +0 -0
  83. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/vof/cutcell.hpp +0 -0
  84. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/vof/plic.hpp +0 -0
  85. {peclet_core-1.3.2 → peclet_core-1.4.0}/include/peclet/core/vof/wetting.hpp +0 -0
  86. {peclet_core-1.3.2 → peclet_core-1.4.0}/packaging/shell/core_geom.py +0 -0
  87. {peclet_core-1.3.2 → peclet_core-1.4.0}/packaging/shell/core_init.py +0 -0
  88. {peclet_core-1.3.2 → peclet_core-1.4.0}/packaging/shell/core_mpi.py +0 -0
  89. {peclet_core-1.3.2 → peclet_core-1.4.0}/python/CMakeLists.txt +0 -0
  90. {peclet_core-1.3.2 → peclet_core-1.4.0}/python/halo_bindings.cpp +0 -0
  91. {peclet_core-1.3.2 → peclet_core-1.4.0}/python/packaging/_halo.pyi +0 -0
  92. {peclet_core-1.3.2 → peclet_core-1.4.0}/python/packaging/halo_init.py +0 -0
  93. {peclet_core-1.3.2 → peclet_core-1.4.0}/python/state_hash.py +0 -0
  94. {peclet_core-1.3.2 → peclet_core-1.4.0}/python/state_hash_reference.json +0 -0
  95. {peclet_core-1.3.2 → peclet_core-1.4.0}/python/test_mpi.py +0 -0
  96. {peclet_core-1.3.2 → peclet_core-1.4.0}/python/test_shell_deprecation.py +0 -0
  97. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/data/rcp_pack_seed3_unit.txt +0 -0
  98. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/python/CMakeLists.txt +0 -0
  99. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/python/interop_test_module.cpp +0 -0
  100. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/python/test_ndarray_interop.py +0 -0
  101. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_aligned_weighted.cpp +0 -0
  102. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_aligned_weighted_mpi.cpp +0 -0
  103. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_cpu_budget.cpp +0 -0
  104. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_csr_solver.cpp +0 -0
  105. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_cut_cell_closure.cpp +0 -0
  106. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_decomposition.cpp +0 -0
  107. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_diffusion.cpp +0 -0
  108. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_diffusion_sdf.cpp +0 -0
  109. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_domain.cpp +0 -0
  110. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_field_set.cpp +0 -0
  111. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_geom_batch_device.cpp +0 -0
  112. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_geom_body.cpp +0 -0
  113. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_geom_owner.cpp +0 -0
  114. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_geom_primitives.cpp +0 -0
  115. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_geom_properties.cpp +0 -0
  116. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_geom_quadrature.cpp +0 -0
  117. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_geom_scene.cpp +0 -0
  118. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_geom_scene_builder.cpp +0 -0
  119. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_geom_scene_query.cpp +0 -0
  120. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_geom_tree_grad.cpp +0 -0
  121. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_ghost_particles_mpi.cpp +0 -0
  122. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_graph_amg.cpp +0 -0
  123. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_graph_amg_device.cpp +0 -0
  124. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_grid_halo.cpp +0 -0
  125. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_grid_halo_exchange.cpp +0 -0
  126. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_grid_redistribute_mpi.cpp +0 -0
  127. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_host_parallel.cpp +0 -0
  128. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_morton_indexer.cpp +0 -0
  129. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_nbx_rounds.cpp +0 -0
  130. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_particle_grid.cpp +0 -0
  131. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_particle_halo_exchange.cpp +0 -0
  132. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_particle_halo_images_mpi.cpp +0 -0
  133. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_particle_halo_mpi.cpp +0 -0
  134. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_particle_migration.cpp +0 -0
  135. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_particle_migrator_view_mpi.cpp +0 -0
  136. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_particle_rebalance.cpp +0 -0
  137. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_sdf.cpp +0 -0
  138. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_skip_mpi.hpp +0 -0
  139. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_stage_redistribute_mpi.cpp +0 -0
  140. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_stage_repartition_mpi.cpp +0 -0
  141. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_stage_target.cpp +0 -0
  142. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_util.hpp +0 -0
  143. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_vof_pvfit.cpp +0 -0
  144. {peclet_core-1.3.2 → peclet_core-1.4.0}/tests/test_vti.cpp +0 -0
  145. {peclet_core-1.3.2 → peclet_core-1.4.0}/tools/cuda_aware_mpi_check.cpp +0 -0
  146. {peclet_core-1.3.2 → peclet_core-1.4.0}/tools/cudampi-env.sh +0 -0
@@ -16,7 +16,7 @@ authors:
16
16
  orcid: "https://orcid.org/0000-0001-6099-3583"
17
17
  email: e.a.j.f.peters@tue.nl
18
18
  affiliation: "Eindhoven University of Technology"
19
- version: 1.3.2
19
+ version: 1.4.0
20
20
  date-released: 2026-10-03
21
21
  license: MIT
22
22
  doi: 10.5281/zenodo.21132435
@@ -37,7 +37,7 @@ ctest --test-dir build --output-on-failure -LE bench # 76 ctests (77 with `ben
37
37
  export PATH=/usr/local/cuda-13.2/bin:$PATH # if the Kokkos install targets the CUDA backend
38
38
  cmake -S . -B build_kokkos -DPECLET_CORE_ENABLE_KOKKOS=ON \
39
39
  -DCMAKE_PREFIX_PATH=../extern/install/nvidia-cuda
40
- cmake --build build_kokkos -j && ctest --test-dir build_kokkos --output-on-failure -LE bench # 92 ctests (93 with `bench`): + device halo / geometry / solver / VoF PV fit, np=1,2,4,8
40
+ cmake --build build_kokkos -j && ctest --test-dir build_kokkos --output-on-failure -LE bench # 96 ctests (97 with `bench`): + device halo / geometry / solver / VoF PV fit / Anderson, np=1,2,4,8
41
41
  mpirun -np 4 ./build/benchmarks/bench_halo 48 1 300
42
42
 
43
43
  # Python modules + their ctests (test_mpi.py np=1,2,4,8; state_hash; ndarray interop). Release is
@@ -199,6 +199,26 @@ Header-only under `include/peclet/core/`:
199
199
  `ot_optimizer.hpp` and the AMR package are the consumers. Gate: `tests/test_csr_solver.cpp`
200
200
  (Kokkos build) — host row kernel vs device matvec, proper colouring of an asymmetric CSR,
201
201
  smoothers, BiCGStab + defect correction.
202
+ `solver/anderson.hpp` is **`AndersonCore`**, type-II Anderson acceleration of a steady march
203
+ (design: `../flow/doc/steady_acceleration.md`; register "AndersonCore lives in core from the
204
+ start"): grid-agnostic over an `AndersonState` (padded state views + roles Velocity / Carried +
205
+ ghost width; the metric is the velocity only, the revision-0 Pressure role, SDF mask, `cP` and
206
+ gauge flag were deleted in WO-3b, rev 1's `innerTolerance` in WO-3c), split `prepare` /
207
+ `complete` around the caller's own step, history `(2m+3)·n_s·8·n_pad` bytes. MPI-free: the
208
+ collectives are two callables in `AndersonComm`; `solver/anderson_mpi.hpp` builds them from an
209
+ `MPI_Comm` and is the MPI side. Rev 2 of the design: **no instability guard** — no Ritz
210
+ estimate, no status "unstable" (`Status` is Active / Disabled); a Ritz value of a non-normal map
211
+ is no stability test, and stability evidence comes from the caller's plain steps. Pass 2 reduces
212
+ RR and b only (2·columns + 2 doubles; no reduction reads dG). A restart (ρ > 4·ρ_min at a mixed
213
+ iterate) **restores the last map output** on every rank (keyed on the broadcast decisions) and
214
+ commits nothing of the rejected evaluation, so the state never holds a rejected output (review
215
+ R2). Gates: `tests/test_anderson.cpp`
216
+ (U1a–c, U2–U6, U4 converges on an unstable map and judges nothing, U4b a stable non-normal map,
217
+ U10 Carried fields, U11 restarts at a noisy near-neutral Carried mode never leave a rejected
218
+ output, metric, memory formula) and `tests/test_anderson_mpi.cpp` (U7, np 1/2/4: γ
219
+ bitwise on all ranks, np = 1 bit-identical to serial; R6: a descriptor invalid on one rank
220
+ throws on every rank); both print a per-test `digest` of every
221
+ iterate for bit-identity checks across builds.
202
222
  - **`amr/` is gone (2026-09-10)** — the whole AMR tree (the block-local-Morton octree, the distributed
203
223
  octree with leaf halos and weighted-ORB rebalancing, the collocated-projection cut-cell
204
224
  Navier–Stokes solver, its tests, studies, docs and campaign logs) is the **`peclet-amr`** package,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: peclet-core
3
- Version: 1.3.2
3
+ Version: 1.4.0
4
4
  Summary: peclet.core — compatibility shell: peclet.core.geom is now peclet.geom, peclet.core.mpi is now peclet.halo
5
5
  Project-URL: Homepage, https://github.com/computational-chemical-engineering/peclet
6
6
  Project-URL: Documentation, https://computational-chemical-engineering.github.io/peclet/
@@ -112,7 +112,10 @@ after `cmake --install`, or as a sibling checkout in the suite.
112
112
  `face_csr.hpp` (host+device row kernels), `coloring.hpp` (greedy symmetrised graph colouring),
113
113
  `csr_operator.hpp` (the device operator, Jacobi and multicolour Gauss–Seidel sweeps),
114
114
  `csr_bicgstab.hpp` (preconditioned BiCGStab / defect correction) and `vector_ops.hpp`. Consumed by
115
- voro's mesh optimiser and by peclet-amr.
115
+ voro's mesh optimiser and by peclet-amr. Since 1.4.0 also `anderson.hpp`: **Anderson acceleration
116
+ of a steady march** (`AndersonCore`, type-II, grid-agnostic, on device; the caller owns the
117
+ fixed-point map, one time step), MPI-free with its collectives built by `anderson_mpi.hpp`.
118
+ Built for flow's `march_to_steady`.
116
119
  - **Python bindings** (`python/halo_bindings.cpp`) — a host-only **nanobind** module (no Kokkos):
117
120
  **`peclet.halo`** exposes the Lagrangian halo (`ParticleMigrator`, `ParticleHalo`: migration /
118
121
  ghosts / count-weighted rebalance) to an mpi4py driver. The shared zero-copy Kokkos
@@ -133,7 +136,7 @@ after `cmake --install`, or as a sibling checkout in the suite.
133
136
 
134
137
  Validated end-to-end by distributed explicit heat-diffusion solvers (plain, and **around an SDF solid
135
138
  obstacle**) matching a serial reference cell-for-cell across ranks, and consumed by the validated
136
- `flow` and `dem` distributed solvers. 72 ctests in the plain host+MPI build, 87 with Kokkos (`np` 1–8),
139
+ `flow` and `dem` distributed solvers. 76 ctests in the plain host+MPI build, 96 with Kokkos (`np` 1–8),
137
140
  plus 6 Python ctests in the `python/` build.
138
141
 
139
142
  ## Build / test / benchmark
@@ -92,7 +92,10 @@ after `cmake --install`, or as a sibling checkout in the suite.
92
92
  `face_csr.hpp` (host+device row kernels), `coloring.hpp` (greedy symmetrised graph colouring),
93
93
  `csr_operator.hpp` (the device operator, Jacobi and multicolour Gauss–Seidel sweeps),
94
94
  `csr_bicgstab.hpp` (preconditioned BiCGStab / defect correction) and `vector_ops.hpp`. Consumed by
95
- voro's mesh optimiser and by peclet-amr.
95
+ voro's mesh optimiser and by peclet-amr. Since 1.4.0 also `anderson.hpp`: **Anderson acceleration
96
+ of a steady march** (`AndersonCore`, type-II, grid-agnostic, on device; the caller owns the
97
+ fixed-point map, one time step), MPI-free with its collectives built by `anderson_mpi.hpp`.
98
+ Built for flow's `march_to_steady`.
96
99
  - **Python bindings** (`python/halo_bindings.cpp`) — a host-only **nanobind** module (no Kokkos):
97
100
  **`peclet.halo`** exposes the Lagrangian halo (`ParticleMigrator`, `ParticleHalo`: migration /
98
101
  ghosts / count-weighted rebalance) to an mpi4py driver. The shared zero-copy Kokkos
@@ -113,7 +116,7 @@ after `cmake --install`, or as a sibling checkout in the suite.
113
116
 
114
117
  Validated end-to-end by distributed explicit heat-diffusion solvers (plain, and **around an SDF solid
115
118
  obstacle**) matching a serial reference cell-for-cell across ranks, and consumed by the validated
116
- `flow` and `dem` distributed solvers. 72 ctests in the plain host+MPI build, 87 with Kokkos (`np` 1–8),
119
+ `flow` and `dem` distributed solvers. 76 ctests in the plain host+MPI build, 96 with Kokkos (`np` 1–8),
117
120
  plus 6 Python ctests in the `python/` build.
118
121
 
119
122
  ## Build / test / benchmark
@@ -5,7 +5,7 @@
5
5
 
6
6
  DOXYFILE_ENCODING = UTF-8
7
7
  PROJECT_NAME = "core"
8
- PROJECT_NUMBER = 1.3.2
8
+ PROJECT_NUMBER = 1.4.0
9
9
  PROJECT_BRIEF = "Shared MPI block decomposition, asynchronous ghost-layer exchange, SDF geometry, load balancing (header-only C++20)"
10
10
  OUTPUT_DIRECTORY = docs
11
11
  HTML_OUTPUT = html