Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
649 commits
Select commit Hold shift + click to select a range
f435101
smoother: metric-redistribution + Monge-Ampere diagnostics
lmoresi May 17, 2026
3e5233c
smoother: MA ~10x faster via factor-once-reuse direct sub-solves
lmoresi May 17, 2026
6f622b2
smoother: Phase-0 study — reject Newton/cofactor MA linearisation
lmoresi May 17, 2026
4e1c5f7
smoother: phi_degree=2 default (~2x cheaper, grading-identical); GAMG…
lmoresi May 17, 2026
f9aeb6e
smoother: P1×GAMG scaling check — P1 does not rescue GAMG; flag direc…
lmoresi May 17, 2026
663811e
smoother: add ma_show_grids.py — render MA-redistributed Annulus grids
lmoresi May 17, 2026
9e21ec2
smoother: document d/n anisotropy-blindness — rim radial over-collapse
lmoresi May 17, 2026
708df94
smoother: hi-res grid renderer — rim over-collapse is resolution-inde…
lmoresi May 17, 2026
7d9635e
smoother: localised features — GAMG robust + heavy-tailed monitor is …
lmoresi May 17, 2026
3b5da1b
smoother: polar metric + boundary slip — settled negative
lmoresi May 17, 2026
c1bf8ab
smoother: angular-OT target vs anisotropic scalar — (2) is a structur…
lmoresi May 17, 2026
62a6912
smoother: (3) metric-tensor construction from grad(rho) — verified
lmoresi May 17, 2026
3ba57fe
docs: add next-phase kickoff brief for the anisotropic mover (3)
lmoresi May 17, 2026
7091c6a
smoother: (3) anisotropic tensor mover — implementation + smoke
lmoresi May 17, 2026
f08e8ca
smoother: (3) mover — fixed-D damped MMPDE, robust defaults, validated
lmoresi May 18, 2026
e21201f
smoother: (3) mover — angular + non-separable validation
lmoresi May 18, 2026
988ecbf
docs: (3) anisotropic mover — implemented & validated
lmoresi May 18, 2026
05e9460
smoother: (3) blob target-metric vs realised diagnostic
lmoresi May 18, 2026
d8c48fc
smoother: (3) demo — Ra=1e5 annulus convection refined on ∇T
lmoresi May 18, 2026
5f97643
docs: (3) mover — Architecture / limitations / unexplored corners
lmoresi May 18, 2026
20da9f6
smoother: (3) mover — GAMG-parity + cost-per-step harness
lmoresi May 18, 2026
656785e
docs: (3) mover — GAMG validated + cost-per-step + 3D scope
lmoresi May 18, 2026
6320cdd
smoother: (3) demo — res-32 convection warm-started from res-16
lmoresi May 18, 2026
96f20bc
smoother: API lock-in for the anisotropic adaptation
lmoresi May 18, 2026
1ee8993
docs: node-snuggling adaptation alongside mesh.adapt
lmoresi May 18, 2026
896140f
smoother: adaptive-convection harness + next-phase kickoff brief
lmoresi May 18, 2026
4e8bc1d
harness: local-FE remap correction (interp) + Nu sign fix
lmoresi May 18, 2026
1aca10e
Add refined-submesh (coarse/fine companion) investigation
lmoresi May 18, 2026
6807b08
Address Copilot review on refined_pair_prototype.py
lmoresi May 18, 2026
b312acd
saturation experiment, dynamic-adapt fixes, proper Nusselt
lmoresi May 18, 2026
65bf0e8
docs: complete mathematical formulation for mesh adaptation
lmoresi May 18, 2026
90df754
fix: amp is a no-op for the anisotropic mover (correct docs)
lmoresi May 18, 2026
ac9a849
sat: a16y — genuinely-stronger metric via the real levers + beta pass…
lmoresi May 18, 2026
1610307
Replace flaky wall-clock lambdify tests with cache-contract tests
lmoresi May 18, 2026
4702561
test: bit-identical continuation — the core stash-for-steps guarantee
lmoresi May 18, 2026
ca5c3ef
Fix lambdify cache never hitting on evaluate() (closes #194)
lmoresi May 18, 2026
af2748d
test(parallel): MPI snapshot/restore — exact reconstruction confirmed
lmoresi May 19, 2026
3efc31b
test: real-solver confidence — discarded step is bit-exact, restore f…
lmoresi May 19, 2026
30a5572
feat: Model.tracker — snapshot-managed, user-extensible run state
lmoresi May 19, 2026
01ae188
docs: user guide for snapshot/restore + Model.tracker (readthedocs)
lmoresi May 19, 2026
8922ea1
demo: snapshot/restore back-stepping visualisations
lmoresi May 19, 2026
271f806
Merge pull request #193 from underworldcode/bugfix/lambdify-caching-c…
lmoresi May 19, 2026
7b13e01
Merge remote-tracking branch 'origin/development' into feature/refine…
lmoresi May 19, 2026
11f3ebc
Merge pull request #192 from underworldcode/feature/refined-submesh-pair
lmoresi May 19, 2026
dcb7b30
Merge pull request #146 from underworldcode/feature/checkpoint-reload…
lmoresi May 19, 2026
14fc00c
review: address Copilot feedback on #195
lmoresi May 20, 2026
cd0f252
Merge pull request #195 from underworldcode/feature/in-memory-checkpoint
lmoresi May 20, 2026
3584be9
Merge pull request #196 from underworldcode/feature/model-tracker
lmoresi May 20, 2026
66a2d74
feat(snapshot v1.1, phase 1): metadata layer + skeleton + inspectability
lmoresi May 20, 2026
bb0b0d3
feat(snapshot v1.1, phase 2): mesh + meshvar bulk via #146 + bit-exac…
lmoresi May 20, 2026
d3ff91d
feat(snapshot v1.1, phase 3a): /python_state — state-bearer round-trip
lmoresi May 20, 2026
94f3b70
feat(snapshot v1.1, phase 3b): swarms in per-swarm sidecars
lmoresi May 20, 2026
3acc65d
feat(snapshot, phase 5): unified Model.save_state / load_state
lmoresi May 20, 2026
52d5277
feat(snapshot, phase 4): MeshVariable.read_timestep is format-aware
lmoresi May 20, 2026
eba7500
feat(snapshot, phase 6): per-rank swarm sidecars — parallel-correct o…
lmoresi May 20, 2026
e37dd0e
Added shared-libraries to petsc build
May 20, 2026
e09b8af
Merge pull request #198 from underworldcode/feature/snapshot-disk
lmoresi May 20, 2026
b616b69
docs: snapshot toolkit — CHANGES entry, current API names, toctree wi…
lmoresi May 20, 2026
44c2f47
Merge pull request #199 from underworldcode/docs/snapshot-toolkit-cha…
lmoresi May 21, 2026
494ac79
meshing+solvers: adapt strategies, gradient-side metric smoothing, an…
lmoresi May 21, 2026
900b4d8
scripts: stagnant-lid drivers and saturation harness updates
lmoresi May 21, 2026
d500c52
meshing: uw.meshing.follow_metric() — two-knob cell-size-envelope API
lmoresi May 21, 2026
2d42138
fix(kdtree): return consistent (n,) shape for k=1 query
lmoresi May 21, 2026
6f4d64b
feat(cdim): plumb embedded-coord dim through solver / JIT / constitut…
lmoresi May 21, 2026
dc6dacd
feat(snes_scalar): add petsc_use_constant_nullspace flag
lmoresi May 21, 2026
fbf3df3
feat(cdim): mesh navigation + SPHERICAL coord system for dim != cdim
lmoresi May 21, 2026
2f892ca
feat(meshing): add SphericalManifold — gmsh sphere as 2-manifold mesh
lmoresi May 21, 2026
fc3065b
feat(submesh): extract_surface — cd-1 submesh from a parent mesh
lmoresi May 21, 2026
03e6865
docs(submesh): three-flavour architecture (subdomain, resolution, sur…
lmoresi May 21, 2026
6767261
meshing: per-cell Lagrangian rest-size spring fixes follow_metric ove…
lmoresi May 21, 2026
5de7cad
meshing: spring uses min-edge/max-edge per cell, sliver-aware in both…
lmoresi May 21, 2026
23abcbf
docs(examples): manifold-PDE demonstration suite on SphericalManifold
lmoresi May 21, 2026
2129af6
mover: kill near-degenerate slivers — cap restore_w + area-floor back…
lmoresi May 21, 2026
0c31803
follow_metric: built-in Jacobi polish pass to clean residual slivers
lmoresi May 21, 2026
74766f4
follow_metric: adaptive Jacobi polish keyed to cell shape quality
lmoresi May 21, 2026
cc8572e
meshing+harness: spring + adaptive polish + dt-mult + perturbation IC…
lmoresi May 23, 2026
959c67d
meshing: OT-improvement step (_winslow_equidistribute) + MA fixes
lmoresi May 23, 2026
1d99d4e
scripts: OT-interleave + multi-res + level-isolation probes
lmoresi May 23, 2026
4b57d15
scripts: blob-then-sharp OT sweep — incremental OT validated
lmoresi May 23, 2026
9ed360c
Add validation for XDMF output to ensure ParaView compatibility
tiannh7 May 24, 2026
d1ede01
Port _write_mesh_viz_groups to actually generate correct ParaView top…
tiannh7 May 24, 2026
b906b13
Add test for /viz/topology generation and XDMF validation
tiannh7 May 24, 2026
23159d6
Address Copilot AI review feedback: improve XDMF scalability and fix …
tiannh7 May 24, 2026
c23d3bd
Fix NameError: pEnd not defined in _local_viz_cell_connectivity
tiannh7 May 24, 2026
0ce05ae
mesh: add get_mean_radius() + @collective_operation on radii accessor…
lmoresi May 25, 2026
4d1e457
Merge pull request #190 from underworldcode/feature/winslow-mesh-smoo…
lmoresi May 25, 2026
75bf61a
Promote monotone interpolation to a universal evaluator flag
lmoresi May 25, 2026
e171fb2
Address Copilot review: fail-fast validation, pick MPI guard, setting…
lmoresi May 25, 2026
97f8951
Merge pull request #208 from underworldcode/feature/monotone-evaluato…
lmoresi May 25, 2026
17b98a5
meshing: land mesh.OT_adapt() — optimal-transport mesh adaptation
lmoresi May 25, 2026
d4e1cbf
solvers: guard + cache the constant nullspace (Copilot review, PR #209)
lmoresi May 25, 2026
989d69a
Merge pull request #209 from underworldcode/feature/anisotropic-metri…
lmoresi May 25, 2026
1e8ce9a
fix(meshing): on_boundary kwarg for in-cell test — accept on-face que…
lmoresi May 25, 2026
a1784c7
meshing: elliptic Monge-Ampere mover + arc-length metric for follow_m…
lmoresi May 25, 2026
1f81152
Merge branch 'underworldcode:development' into development
jcgraciosa May 26, 2026
1e55450
docs(meshing): clarify _get_closest_local_cells_internal expects mode…
lmoresi May 26, 2026
830d47d
Fix parallel heap-corruption in adaptive mesh-movers (MUMPS at np>=3)
lmoresi May 27, 2026
a4484cf
docs: mark parallel-mover-corruption design note as FIXED (PR #213)
lmoresi May 27, 2026
60f8fe0
Make the parallel mesh-adapt remesh decision collective
lmoresi May 27, 2026
275b73b
Use global_evaluate for the parallel field remap after mesh adaptation
lmoresi May 27, 2026
c977e48
meshing: fault-refinement layer (anisotropic + comb), 3D MA, composab…
lmoresi May 28, 2026
f2d4050
meshing: generic topology-based tangent-slip across all movers
lmoresi May 28, 2026
faabad4
docs: fault-refinement simplification design note
lmoresi May 28, 2026
34beea2
docs: clarify that boundary_slip=True is part of the recommended recipe
lmoresi May 28, 2026
b088422
docs: refine recipe -- n_outer>1 only for Eulerian metrics; target_si…
lmoresi May 28, 2026
093a9b5
docs: back out target_side_rho recommendation, characterise n_outer h…
lmoresi May 28, 2026
c52201b
remesh field-transfer redesign (Phase 1 + Phase 2) + parallel locator…
lmoresi May 28, 2026
1419c4f
meshing: add face-relative tol= kwarg alongside on_boundary
lmoresi May 28, 2026
41b2e53
meshing: unify locator API with PR #207 (on_boundary + tol)
lmoresi May 28, 2026
9edd924
Merge pull request #207 from underworldcode/bugfix/in-cell-test-loose…
lmoresi May 28, 2026
43a2137
Merge development (PR #207 in-cell-test loose semantics) into bugfix/…
lmoresi May 28, 2026
4b54c9f
tests: relax test_advDiff_boxmesh[mesh0] xfail to strict=False
lmoresi May 28, 2026
b0ded2d
meshing: lumped V_T projection for composable elliptic-MA iteration
lmoresi May 28, 2026
27747d4
docs: convergence diagnostic + n_picard=25 is a feature, not a limit
lmoresi May 28, 2026
ba5a345
docs: correct fault recipe — smooth-aid, plain Picard, fat band
lmoresi May 29, 2026
65b1a2f
Address Copilot review on PR #213
lmoresi May 29, 2026
96e118e
Merge pull request #213 from underworldcode/bugfix/parallel-singular-…
lmoresi May 29, 2026
29a2029
Merge pull request #205 from tiannh7/fix-xdmf-topology-validation
lmoresi May 29, 2026
9441489
Anisotropic MMPDE mesh mover (method="mmpde"): parallel-cap note + de…
lmoresi May 30, 2026
32fc935
mmpde: RBF-baked metric eval (default), ~3.7x faster, same quality
lmoresi May 31, 2026
f5102b4
mmpde: simplex lock-out + dimension-general cells + fix 3D signed_vol…
lmoresi May 31, 2026
8813774
mmpde: make it the default mover + tol-exit/RBF/simplex + docs
lmoresi Jun 1, 2026
941e8eb
Add named-surface tangent slip (slip_surfaces) to the metric movers
lmoresi Jun 1, 2026
4dccafb
Fix slip-surface abort with MeshVariable-valued metrics
lmoresi Jun 1, 2026
486d0ae
Geometry-aware GMG interpolation for mover-adapted meshes
lmoresi Jun 3, 2026
fd6070d
feat(manifold): parallel point-evaluation + scalar PDE solver on cd-1…
lmoresi May 22, 2026
6423c73
feat(manifold): SNES_MultiComponent_Projection unblocks SLCN flux his…
lmoresi May 23, 2026
3778346
mover: guard non-finite line-search step (parallel deadlock fix) + op…
lmoresi Jun 4, 2026
0c768c0
fix(meshing): on_boundary kwarg for in-cell test — accept on-face que…
lmoresi May 25, 2026
b7da8f2
Merge origin/development: recover PR #213 parallel-adaptation fix
lmoresi Jun 4, 2026
59277aa
mmpde: accept a scalar density metric as isotropic rho*I
lmoresi Jun 4, 2026
b89e04e
tests: align mover suite with the development-merge API
lmoresi Jun 4, 2026
08badc0
meshing: drop abandoned GMG geometric-interpolation cruft
lmoresi Jun 4, 2026
086cad2
fix(meshing): monotone-clamp the adapt field-transfer (parallel free-…
lmoresi Jun 4, 2026
8ea2482
meshing: REMESH_MONOTONE env toggle for adapt field-transfer clamp
lmoresi Jun 5, 2026
f0cdd36
AdvDiffusionSLCN.estimate_dt: opt-in median/percentile cell reduction
lmoresi Jun 6, 2026
7c13f83
SwarmVariable._pack_array_to_data_format: guard empty partitions
lmoresi Jun 6, 2026
c25a4b7
MMPDE mover: heavy-ball + nonlinear-CG acceleration
lmoresi Jun 6, 2026
b6cbe0f
stagnant_lid_adapt_loop: FMG velocity, mover dispatch, per-phase timing
lmoresi Jun 6, 2026
f6f0b96
global_evaluate: faithful parallel evaluate() — fix out-of-domain mis…
lmoresi Jun 6, 2026
61f05a3
MMPDE mover: accel/momentum as kwargs (drop MMPDE_ACCEL/MMPDE_MOMENTU…
lmoresi Jun 6, 2026
93abe51
global_evaluate: local_fallback as a kwarg (not just GE_LOCAL_FALLBAC…
lmoresi Jun 6, 2026
e19893a
metric_density_from_gradient: wire refinement R = edge-length ratio
lmoresi Jun 6, 2026
df95bdc
docs: boundary tangent-slip strategy design
lmoresi Jun 7, 2026
85e3152
feat(meshing): BoundingSurface objects + mesh.boundary_slip API (step 1)
lmoresi Jun 7, 2026
40405f0
Port SolCx analytic Stokes solution into uw.function.analytic
lmoresi Jun 7, 2026
4388f90
SolCx: address review — viscosity tie-break, sign comments, validatio…
lmoresi Jun 8, 2026
039543c
Merge branch 'feature/boundary-slip-surfaces' into feature/anisotropi…
lmoresi Jun 8, 2026
d5afb4d
Merge pull request #223 from underworldcode/bugfix/analytic-solutions
lmoresi Jun 8, 2026
3ce4947
WIP(meshing): BoundingSurface facet kind (step-2 groundwork)
lmoresi Jun 8, 2026
022241e
Stokes_Constrained: in-saddle multiplier free-slip + topography (supe…
lmoresi Jun 8, 2026
ce681ad
fix(meshing): validate BoundingSurface geometry + project only owned …
lmoresi Jun 9, 2026
21fdd09
docs(meshing): explain BoundingSurface.normals re-solve choice (bread…
lmoresi Jun 9, 2026
a95a60d
Analytic SolCx: expose exact stress tensor (SolCx_stress)
lmoresi Jun 9, 2026
4781f6a
fix(meshing): allow radius==0 for a solid-mesh inner boundary (CI fix)
lmoresi Jun 9, 2026
2776ef6
Merge pull request #220 from underworldcode/bugfix/advdiff-estimate-d…
lmoresi Jun 9, 2026
ac17a34
test(meshing): move 3D SphericalShell radial test to the early CI batch
lmoresi Jun 9, 2026
15e0147
feat(meshing): movers consume mesh.boundary_slip; delete duplicated s…
lmoresi Jun 9, 2026
1efba12
Merge pull request #225 from underworldcode/feature/boundary-slip-sur…
lmoresi Jun 9, 2026
6075849
Merge remote-tracking branch 'origin/development' into feature/anisot…
lmoresi Jun 9, 2026
eee5070
docs(meshing): roadmap — boundary slip → a mesh-owned surface contract
lmoresi Jun 9, 2026
c6524cc
fix(meshing): parallel correctness — zero vglob before ADD assembly; …
lmoresi Jun 9, 2026
f92e545
Stokes_Constrained: default to the selfp constraint-Schur preconditioner
lmoresi Jun 9, 2026
a388902
Stokes: viscosity-scale the augmented-Lagrangian (grad-div) penalty
lmoresi Jun 9, 2026
283f869
Stokes_Constrained: remove the (redundant) saddle_preconditioner prop…
lmoresi Jun 10, 2026
19fd5b8
Address review: drop local-path comment, re-setup on pressure-nullspa…
lmoresi Jun 10, 2026
87d778d
Merge pull request #229 from underworldcode/feature/block-multiplier-…
lmoresi Jun 10, 2026
3cd73cd
Restore FMG mesh hierarchy transparently on checkpoint reload
lmoresi Jun 11, 2026
020352e
Add `preconditioner` property: automatic geometric FMG on refinement …
lmoresi Jun 11, 2026
1085030
docs(multigrid): add FMG vs GAMG benchmark figure, reconcile the numbers
lmoresi Jun 11, 2026
2e971fa
docs(multigrid): mark benchmark provenance note as an orphan page
lmoresi Jun 11, 2026
9376012
Fix CI build and address review on checkpoint-hierarchy reload
lmoresi Jun 11, 2026
77f2429
Address review: warn (not print) on the FMG-without-hierarchy fallback
lmoresi Jun 11, 2026
40be67b
fix(harness): robust --resume — match history columns + guard corrupt…
lmoresi Jun 11, 2026
5aec2b2
Harden geometric FMG preconditioner: durable override, parallel-safe …
lmoresi Jun 12, 2026
622cf4c
Merge pull request #221 from underworldcode/bugfix/swarm-empty-partit…
lmoresi Jun 12, 2026
59775f9
Merge pull request #228 from underworldcode/feature/anisotropic-mover…
lmoresi Jun 12, 2026
78a7d57
Merge pull request #230 from underworldcode/feature/fmg-checkpoint-hi…
lmoresi Jun 12, 2026
b2cce5d
Merge pull request #231 from underworldcode/bugfix/fmg-preconditioner
lmoresi Jun 12, 2026
4fb39ec
fix(meshing): FMG checkpoint restart — distribute coarsest then refine
lmoresi Jun 12, 2026
bb7100c
Merge pull request #232 from underworldcode/bugfix/fmg-restart-partit…
lmoresi Jun 12, 2026
a97f9dc
Add maturity-gated release tooling (./uw dev)
lmoresi Jun 12, 2026
58aaa0c
Potential fix for pull request finding
lmoresi Jun 12, 2026
bce2a1d
Address Copilot review on release tooling
lmoresi Jun 12, 2026
d972a4b
global_evaluate: address review nits
lmoresi Jun 12, 2026
31e7fd2
projection: unit-aware smoothing_length with validation and round-tri…
lmoresi Jun 12, 2026
9da90ab
Merge pull request #233 from underworldcode/docs/maturity-gated-release
lmoresi Jun 12, 2026
b00a121
Merge pull request #226 from underworldcode/bugfix/analytic-solcx-stress
lmoresi Jun 12, 2026
58385b9
Merge pull request #222 from underworldcode/bugfix/global-evaluate-pa…
lmoresi Jun 12, 2026
da4573a
Merge pull request #234 from underworldcode/feature/projection-smooth…
lmoresi Jun 12, 2026
3ca9449
tests: cover SNES_Scalar.constant_nullspace (pure-Neumann Poisson)
lmoresi Jun 12, 2026
4b55df6
Merge pull request #235 from underworldcode/feature/constant-nullspac…
lmoresi Jun 13, 2026
5a57f0c
manifest: add constant_nullspace as a supported feature
lmoresi Jun 13, 2026
5c790ac
Merge pull request #236 from underworldcode/feature/manifest-constant…
lmoresi Jun 13, 2026
f443c2b
Merge pull request #210 from jcgraciosa/development
lmoresi Jun 13, 2026
a01e79f
Merge remote-tracking branch 'origin/feature/surface-submesh' into fe…
lmoresi Jun 14, 2026
5bb72c4
fix(merge): dedup constant-nullspace — keep dev's guarded impl, alias…
lmoresi Jun 14, 2026
6bd853f
test(merge): xfail follow_metric skip-threshold for dev↔#202 reconcil…
lmoresi Jun 14, 2026
a6f1419
feat(submesh): promote extract_surface to a Mesh method
lmoresi Jun 14, 2026
0419495
test(submesh): contract tests for Mesh.extract_surface (2D + 1D)
lmoresi Jun 14, 2026
d75dd78
feat(meshing): smooth_surface_field — Taubin graph low-pass of a scal…
lmoresi Jun 14, 2026
bf550f0
feat(meshing): make smooth_surface_field parallel (bit-identical seri…
lmoresi Jun 14, 2026
0ed9312
fix(mesh): only the canonical coord array triggers a deform (identity…
lmoresi Jun 14, 2026
915c3cb
fix(meshing): stop dm_plex_gmsh_spacedim leaking across gmsh imports …
lmoresi Jun 14, 2026
f6828f3
Merge pull request #237 from underworldcode/feature/integrate-surface…
lmoresi Jun 15, 2026
7696d89
Stokes_Constrained: unlock parallel (remove over-conservative serial …
lmoresi Jun 15, 2026
f99c8aa
Foolproof mesh-coordinate mutation: capability gate + public deform()…
lmoresi Jun 16, 2026
865e702
Merge pull request #246 from underworldcode/bugfix/sl-field-carry-on-…
lmoresi Jun 16, 2026
533888f
Lock the coord-mutation gate with a regression test; add lagged-clone…
lmoresi Jun 17, 2026
71ca49d
Merge pull request #249 from underworldcode/bugfix/deform-gate-test-a…
lmoresi Jun 17, 2026
a708e8c
feat(ddt): old-frame semi-Lagrangian reach-back for moving meshes
lmoresi Jun 18, 2026
84294f2
fix(meshing): stop dm_plex_gmsh_spacedim leaking across gmsh imports …
lmoresi Jun 18, 2026
44aff94
Surface.influence_function: respect finite edges (no bleed past the e…
lmoresi Jun 18, 2026
7286dc8
Fix units setup in vector projection Poisson test (#227)
ss2098 Jun 18, 2026
54b815c
Per-iteration SNES update callbacks (pressure gauge + boundary-correc…
lmoresi Jun 18, 2026
bc834b4
Use PETSc-native XDMF visualization topology (#218)
gthyagi Jun 18, 2026
34a9dd4
docs(solvers): preserve SNESFAS / Vanka / grid-sequencing investigati…
lmoresi Jun 18, 2026
376dbdf
Add Gadi Singularity container build files for UW3 (#133)
jcgraciosa Jun 18, 2026
0822685
docs(solvers): escape |v| in estimate_dt docstring (RST substitution)
lmoresi Jun 18, 2026
071c563
fix(meshing): extract_region no longer raises on _build_vertex_map (#…
lmoresi Jun 18, 2026
0f00650
Fix spherical shell labels and add Stokes residual diagnostics (#242)
gthyagi Jun 18, 2026
36d5925
Merge pull request #251 from underworldcode/feature/oldframe-sl-trace…
lmoresi Jun 18, 2026
46b8f16
fix(darcy): correct transient velocity sign + sign-convention docstri…
lmoresi Jun 19, 2026
7d776e2
cleanup(xdmf/snapshot): silence internal write_checkpoint FutureWarni…
lmoresi Jun 19, 2026
4d0069a
fix(meshing): SPD-floor the mmpde metric to stop silent NaN-bail on d…
lmoresi Jun 20, 2026
51ecd29
fix(mesh): boundary normals and domain membership must track a deform…
lmoresi Jun 22, 2026
4513209
fix(meshing): mmpde metric — monotone RBF bake from nodal values (#266)
lmoresi Jun 22, 2026
13e2eca
Tidy docstring placement in vector projection Poisson test (#257)
ss2098 Jun 22, 2026
b47a9de
Skip mesh view length-scale test without pyvista (#260)
ss2098 Jun 22, 2026
1404e60
Fix dimensionality demo for strict units (#261)
ss2098 Jun 22, 2026
25a4388
Fix unit-aware coordinate evaluation example (#262)
ss2098 Jun 22, 2026
0aa6eef
fix(ddt): units-active semi-Lagrangian trace-back (#267) (#277)
lmoresi Jun 24, 2026
e0ece9a
docs: define the non-dimensional <-> units boundary contract (#278)
lmoresi Jun 24, 2026
5b55b47
fix(params): apply -uw_* CLI overrides regardless of platform (#111) …
lmoresi Jun 24, 2026
8061dd1
feat(projection): opt-in linear_solver() + post-processing how-to (#1…
lmoresi Jun 24, 2026
3f1f65e
Polish dimensionality demo unit assignment (#268)
ss2098 Jun 24, 2026
84a1208
Make Poisson gradient recovery example script-safe (#270)
ss2098 Jun 24, 2026
b4d0079
Fix Darcy 1D benchmark for current API (#272)
ss2098 Jun 24, 2026
a15d6bc
Fix Darcy Cartesian example script run (#273)
ss2098 Jun 24, 2026
1301c55
Fix explicit flow grains script run (#274)
ss2098 Jun 24, 2026
d430ea3
fix(units): meshvar arithmetic with a UWQuantity operand (#282) (#283)
lmoresi Jun 24, 2026
1947512
fix(stokes): bodyforce setter accepts a UWQuantity component (#284)
lmoresi Jun 24, 2026
09e8c73
Stokes_Constrained parallel correctness: gauge, convergence, knockout…
lmoresi Jun 24, 2026
a7f0b11
Nitsche BC: scale penalty by a local per-cell mesh size (#275)
lmoresi Jun 24, 2026
a649ed9
Avoid PETSc IS size query during boundary rebuild (#287)
gthyagi Jul 2, 2026
7571304
test: add serial boundary-integral coverage after mesh.deform()
Jul 7, 2026
6a2ff42
release/v3.1.0: skip 13 failing tests with detailed in-source reasons
Jul 7, 2026
97157b9
release/v3.1.0: release notes and manifest (FMG downgraded to preview)
Jul 7, 2026
723d78b
release/v3.1.0: add new features, improvements, and breaking changes …
Jul 7, 2026
13ea228
docs: regenerate docstring queue and update changelog for v3.1.0 sweep
Jul 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
41 changes: 23 additions & 18 deletions .github/workflows/build_uw3_and_test.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
name: test_uw3

# We should trigger this from an upload event. Note that pdoc requires us to import the
# built code, so this is a building test as well as documentation deployment
# Build + test on every PR / push to main / development.
#
# Uses pixi (with the committed pixi.lock) for a deterministic, fast install
# rather than micromamba + environment.yaml, which had been backtracking for
# 60+ minutes on conda-forge solves and timing the runner out before tests
# could start. The pixi.lock matches what local development uses, so CI now
# runs against the same dependency state developers see.

on:
push:
Expand All @@ -17,27 +22,27 @@ on:
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 60

steps:
- uses: actions/checkout@v4

- name: Install Conda environment with Micromamba
uses: mamba-org/setup-micromamba@v2
- name: Install pixi from lockfile
uses: prefix-dev/setup-pixi@v0.9.4
with:
environment-file: ./environment.yaml
cache-downloads: true
cache-environment: true
# Use the env that matches local development for tests.
# `dev` = conda-petsc + runtime + dev features (pytest, jupyter, etc.)
environments: dev
# Hard-fail if pixi.lock disagrees with pixi.toml — never re-solve
# silently in CI; that's exactly the failure mode we're escaping.
frozen: true
cache: true

- name: Build UW3
shell: bash -l {0}
run: |
export PETSC_DIR="/home/runner/micromamba/envs/uw3_test/lib"
VERSION=`python3 setup.py --version`
echo "UW - version " ${VERSION}

## TODO. Use scripts/compile.sh once it is in development
pip install -e . --no-build-isolation
# `pixi run -e dev build` invokes the build task from pixi.toml,
# which is `pip install . --no-build-isolation` (non-editable —
# editable installs are project policy violation, see CLAUDE.md).
run: pixi run -e dev build

- name: Run tests
shell: bash -l {0}
run: |
./scripts/test.sh --p 2
run: pixi run -e dev ./scripts/test.sh --p 2
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -255,4 +255,5 @@ docs/beginner/tutorials/html5/*.html
.pixi-env
# PETSc build (directory in main repo, symlink in worktrees)
petsc-custom/petsc
petsc-custom/.petsc-version
Untitled*.ipynb
70 changes: 70 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,75 @@
# CHANGES: Underworld3

## 2026-05-20

- **Snapshot toolkit (PRs #195, #196, #198)**: unified
state-capture mechanism for Underworld3 models.

User-facing API on `Model`:

```python
token = model.save_state() # in-memory "stash for timesteps"
model.load_state(token) # exact restore from token

model.save_state(file="step42.snap.h5") # persistent on-disk snapshot
model.load_state("step42.snap.h5") # restore from disk
```

Same call, two storage modes. Captures the full model — every
registered mesh and mesh-variable, every swarm with per-particle
data, every solver-internal state-bearer (`ModelTracker`, `DDt`
instances, anything exposing the `Snapshottable` contract). User
guide: `docs/advanced/snapshot-restore.md`.

- **In-memory mode** (#195): bit-exact discard-of-a-step
guarantee, proven through real PETSc solves; parallel-correct
under MPI at any fixed rank count (recovers from genuine
cross-rank particle loss); rebuild-on-restore semantics for
swarms (the discarded step *is* what restore exists to undo).
- **`Model.tracker`** (#196): model-dwelling, snapshot-managed
record of where a run is. Holds `time` / `step` / `dt` plus
any quantity the user parks on it (`model.tracker.foo = ...`)
— anything on the tracker reverts with the model. Solvers do
not depend on it; using it is optional. A loose Python
variable is not reverted by `load_state`; the same value on
the tracker is.
- **On-disk mode (v1.1, #198)**: HDF5 wrapper file + companion
`.bulk/` directory. Wrapper is `h5ls`-inspectable without UW3
in the loop (carries run name, schema version, sim time, step,
MPI rank count, mesh/swarm/variable inventories). Bulk data
uses PR #146's PETSc DMPlex primitives for mesh + meshvars;
swarms get per-rank h5py sidecars for parallel correctness.
Same-rank-count restart contract; clean errors on rank-count
mismatch.

Related API changes:

- `MeshVariable.read_timestep` is now format-aware: detects
whether the file is a legacy `write_timestep` per-variable
file or a v1.1 snapshot wrapper and dispatches internally.
Existing scripts that call `var.read_timestep(...)` work
transparently against new files via a KDTree bridge over
`MeshVariable.read_checkpoint` (#146).
- `mesh.write_timestep()` / `mesh.write_checkpoint()` (PR #146)
remain unchanged — they serve different use cases
(visualisation + flexible/cross-resolution restart;
memory-efficient same-rank PETSc reload for postprocessing).
See "Choosing between paths" in the user guide.

State-as-dataclass contract for solver helpers:
`docs/developer/guides/state-as-dataclass.md` — declare
mutable evolution state as a `SnapshottableState` dataclass
and the snapshot mechanism captures/restores it with no extra
plumbing. Retrofitted for all five DDt flavors in this work
(`Symbolic`, `Eulerian`, `SemiLagrangian`, `Lagrangian`,
`Lagrangian_Swarm`).

- **Fix(ddt): `Lagrangian.__init__` typo (`uw.swarm.UWSwarm` →
`uw.swarm.Swarm`)** (PR #184). Lagrangian DDt had been
unconstructible since commit `0778b7d` (2025-07-07) — typo
introduced during the unrelated `evalf` cleanup. Surfaced
during the snapshot toolkit's retrofit work.

## 2026-03-14

- **Release v3.0.0**: Merged development (398 commits) to main, tagged v3.0.0
Expand Down
Loading
Loading