From 9ba8d21d0fa82bcce8467778f70b7a0ffe3e9ab3 Mon Sep 17 00:00:00 2001 From: lmoresi Date: Wed, 9 Sep 2026 13:32:42 -0700 Subject: [PATCH 01/10] Material index at the integration points; repopulation keeps a label a label; two demonstrations IndexSwarmVariable gains proxy_location, so a material index can be read where the assembler looks. "integration_points": every integration point takes the material of its NEAREST PARTICLE, so each level set is exactly 0 or 1, the interface keeps its sub-cell position and nothing can overshoot (the Ellipsis / Underworld particle-in-cell material mapping). "cells": a polynomial material fraction per cell, clamped to [0, 1] and renormalised so the masks still sum to one. "nodes" is unchanged and remains the default. Measured on two viscosity layers (1 and 1000) with the interface on mesh edges, where the exact velocity lies in the P2 space so the only error is the material representation: the nodal level set ramps across a whole cell and leaves an L2 velocity error of 8.0e-2; at the integration points the same solve is exact to solver tolerance, 1.8e-7. All three integrate the viscosity correctly in the mean (500.5000), which is why a bulk diagnostic does not see the difference. Swarm.repopulate: an INTEGER variable now takes its nearest neighbour's value whole instead of a reconstruction, since the average of two material labels is not a label; `nearest=` names other variables to treat the same way. Float fields keep their linear-exact reconstruction. Two demonstrations, with figures, in a new user-facing page docs/advanced/particle-population-and-materials.md and runnable scripts in docs/examples/utilities/intermediate/: population control in an extending box (without it the box drains to 13% of its particles and 626 of 764 cells are empty; with it, none are), and the material index above. Also removes a dead docstring block left in IndexSwarmVariable.__init__. Underworld development team with AI support from Claude Code Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01MSGAFeA7qYXgkuw9ud8F2G --- docs/advanced/figures/material_index.png | Bin 0 -> 102161 bytes docs/advanced/figures/repopulation_counts.png | Bin 0 -> 83967 bytes .../figures/repopulation_particles.png | Bin 0 -> 174483 bytes docs/advanced/index.md | 8 + .../particle-population-and-materials.md | 150 ++++++++++++++++++ .../intermediate/Ex_Swarm_Material_Index.py | 96 +++++++++++ .../Ex_Swarm_Population_Control.py | 106 +++++++++++++ src/underworld3/swarm.py | 145 ++++++++++++++--- tests/test_0071_index_swarm_proxy_location.py | 137 ++++++++++++++++ 9 files changed, 623 insertions(+), 19 deletions(-) create mode 100644 docs/advanced/figures/material_index.png create mode 100644 docs/advanced/figures/repopulation_counts.png create mode 100644 docs/advanced/figures/repopulation_particles.png create mode 100644 docs/advanced/particle-population-and-materials.md create mode 100644 docs/examples/utilities/intermediate/Ex_Swarm_Material_Index.py create mode 100644 docs/examples/utilities/intermediate/Ex_Swarm_Population_Control.py create mode 100644 tests/test_0071_index_swarm_proxy_location.py diff --git a/docs/advanced/figures/material_index.png b/docs/advanced/figures/material_index.png new file mode 100644 index 0000000000000000000000000000000000000000..98aa69b77089d8a26acd2e9e7550f6513f8916ff GIT binary patch literal 102161 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

O}FeB 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

wsC~*uB%d}?OT(tH@9?Cj!edvq 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 H).astype(int) # 0 below the interface, 1 above + +eta = mat.createMask([1.0, ETA_TOP]) + +stokes = uw.systems.Stokes(mesh, velocityField=v, pressureField=p) +stokes.constitutive_model = uw.constitutive_models.ViscousFlowModel +stokes.constitutive_model.Parameters.shear_viscosity_0 = eta +stokes.add_dirichlet_bc((1.0, 0.0), "Top") +stokes.add_dirichlet_bc((0.0, 0.0), "Bottom") +stokes.add_dirichlet_bc((sympy.oo, 0.0), "Left") +stokes.add_dirichlet_bc((sympy.oo, 0.0), "Right") +stokes.tolerance = 1e-8 +stokes.solve() + +# Exact layered Couette profile +A = 1.0 / (H + (1.0 - H) / ETA_TOP) +Xv = np.asarray(v.coords) +vx_exact = np.where(Xv[:, 1] < H, A * Xv[:, 1], A * H + A / ETA_TOP * (Xv[:, 1] - H)) +err = np.abs(np.asarray(v.data[:, 0]) - vx_exact) +assembled = float(uw.maths.Integral(mesh, eta).evaluate()) +exact_int = 1.0 * H + ETA_TOP * (1.0 - H) + +# The material as the weak form sees it, on a fine sampling line across the interface +ys = np.linspace(max(0.0, H - 0.25), min(1.0, H + 0.25), 201) +line = np.c_[np.full_like(ys, 0.5), ys] +upper = np.asarray(uw.function.evaluate(mat.sym[1], line)).reshape(-1) + +os.makedirs(OUT, exist_ok=True) +np.savez(f"{OUT}/matindex_{PROXY}.npz", ys=ys, upper=upper, vy=Xv[:, 1], + vx=np.asarray(v.data[:, 0]), vx_exact=vx_exact, l2=np.sqrt(np.mean(err ** 2)), + linf=err.max(), assembled=assembled) +print(f"RESULT proxy={PROXY} deg={DEG} fill={FILL}: assembled int(eta) {assembled:.4f} " + f"(exact {exact_int:.4f}) | vx L2 {np.sqrt(np.mean(err**2)):.3e} Linf {err.max():.3e} " + f"| mask range {upper.min():+.4f}..{upper.max():+.4f}", flush=True) diff --git a/docs/examples/utilities/intermediate/Ex_Swarm_Population_Control.py b/docs/examples/utilities/intermediate/Ex_Swarm_Population_Control.py new file mode 100644 index 000000000..329954b7e --- /dev/null +++ b/docs/examples/utilities/intermediate/Ex_Swarm_Population_Control.py @@ -0,0 +1,106 @@ +# --- +# jupyter: +# jupytext: +# formats: py:percent +# text_representation: +# extension: .py +# format_name: percent +# format_version: '1.3' +# kernelspec: +# display_name: Python 3 +# language: python +# name: python3 +# --- + +# %% [markdown] +""" +# Swarm population control in an extending box + +**PHYSICS:** utilities +**DIFFICULTY:** intermediate +**PURPOSE:** demonstration + +## Description + +Pure-shear extension `v = (x, -y)` on a fixed mesh: the side walls are +outflow and the top and bottom are inflow. Nothing enters through an +inflow boundary unless we put it there, so the cells along the top and +bottom starve and the marker layer they carry breaks up. + +Setting `swarm.population_control` refills the starved cells at the end +of every `advection()`. Run it with `POPCTL=0` and `POPCTL=1` and +compare: without control the box drains to 13% of its particles and +most cells are empty; with control no cell is ever empty. + +The velocity is prescribed, so what this measures is the swarm +machinery alone, with no solve in the way. +""" + +# %% +import os + +import numpy as np +import sympy + +import underworld3 as uw + +POPCTL = os.environ.get("POPCTL", "1") == "1" +CELL = float(os.environ.get("CELL", "0.08")) +STEPS = int(os.environ.get("STEPS", "40")) +DT = float(os.environ.get("DT", "0.05")) +FILL = int(os.environ.get("FILL", "3")) +OUT = os.environ.get("OUT", "runs") + +mesh = uw.meshing.UnstructuredSimplexBox( + minCoords=(-1.0, -0.5), maxCoords=(1.0, 0.5), cellSize=CELL, qdegree=2 +) +x, y = mesh.X +V = sympy.Matrix([[x, -y]]) # incompressible pure shear +mesh.return_coords_to_bounds = None # a true outflow: particles leave + +swarm = uw.swarm.Swarm(mesh) +M = uw.swarm.IndexSwarmVariable("M", swarm, indices=2, proxy_degree=1, + proxy_location="integration_points") +swarm.populate(fill_param=FILL) +X0 = np.asarray(swarm._particle_coordinates.data) +with uw.synchronised_array_update(): + M.data[:, 0] = (np.abs(X0[:, 1]) < 0.2).astype(int) # a central layer + +if POPCTL: + # Refill starved cells. Material of a new particle: its nearest neighbour's + # (an index is not an average), which is what `nearest=` selects. + swarm.population_control = dict(min_per_cell=6) + +c0, c1 = mesh.dm.getHeightStratum(0) +ncells = c1 - c0 + + +def census(): + P = np.asarray(swarm._particle_coordinates.data) + cells = np.asarray(mesh._robust_owning_cells(P)) + return np.bincount(cells[cells >= 0], minlength=ncells) + + +hist = [] +frames = {} +for step in range(STEPS + 1): + n = census() + hist.append((step * DT, swarm.local_size, int((n == 0).sum()), int((n < 6).sum()), int(n.min()))) + if step in (0, STEPS // 2, STEPS): + P = np.asarray(swarm._particle_coordinates.data) + frames[step] = dict(P=P.copy(), M=np.asarray(M.data[:, 0]).copy(), n=n.copy()) + if step < STEPS: + swarm.advection(V, DT, order=2) + +os.makedirs(OUT, exist_ok=True) +tag = "popctl" if POPCTL else "nopopctl" +np.savez(f"{OUT}/repop_{tag}.npz", hist=np.array(hist), + **{f"P{k}": v["P"] for k, v in frames.items()}, + **{f"M{k}": v["M"] for k, v in frames.items()}, + **{f"n{k}": v["n"] for k, v in frames.items()}, + steps=np.array(sorted(frames)), cell=CELL, dt=DT) + +h = np.array(hist) +print(f"RESULT {tag}: cells {ncells}, start {int(h[0,1])} particles " + f"-> end {int(h[-1,1])} | empty cells {int(h[0,2])} -> {int(h[-1,2])} | " + f"cells below 6 {int(h[0,3])} -> {int(h[-1,3])} | min per cell {int(h[-1,4])}", flush=True) diff --git a/src/underworld3/swarm.py b/src/underworld3/swarm.py index 7a0ff74c3..27ce4910b 100644 --- a/src/underworld3/swarm.py +++ b/src/underworld3/swarm.py @@ -2367,6 +2367,16 @@ class IndexSwarmVariable(SwarmVariable): Polynomial degree for mesh projection (default 1). proxy_continuous : bool Whether mesh proxy is continuous (default True). + proxy_location : {"nodes", "integration_points", "cells"}, default="nodes" + Where the level sets live. ``"nodes"``: a continuous field per + material, so a node on an interface averages both materials. + ``"integration_points"``: every integration point takes the material + of its NEAREST PARTICLE, so each level set is exactly 0 or 1 and the + interface keeps its sub-cell position (the Ellipsis / Underworld + particle-in-cell material mapping). ``"cells"``: a polynomial material + fraction per cell, clamped to [0, 1] and renormalised, sharp at cell + edges and differentiable inside a cell. ``proxy_continuous`` applies + only to ``"nodes"``. Examples -------- @@ -2388,6 +2398,7 @@ def __init__( indices=1, proxy_degree=1, proxy_continuous=True, + proxy_location="nodes", update_type=0, npoints=5, radius=0.5, @@ -2396,6 +2407,13 @@ def __init__( varsymbol=None, ): self.indices = indices + if proxy_location not in ("nodes", "integration_points", "cells"): + raise ValueError( + "proxy_location must be 'nodes', 'integration_points' or 'cells', " + f"not {proxy_location!r}" + ) + self._proxy_location = proxy_location + self._cell_projector = None self.nnn = npoints self.radius_s = radius # **2 # changed to radius self.update_type = update_type @@ -2415,16 +2433,6 @@ def __init__( _proxy=False, varsymbol=varsymbol, ) - """ - vtype = (None,) - dtype = (float,) - proxy_degree = (1,) - proxy_continuous = (True,) - _register = (True,) - _proxy = (True,) - varsymbol = (None,) - rebuild_on_cycle = (True,) - """ # The indices variable defines how many "level set" maps we create as components in the proxy variable import sympy @@ -2433,13 +2441,21 @@ def __init__( self._meshLevelSetVars = [None] * self.indices for i in range(indices): - self._meshLevelSetVars[i] = uw.discretisation.MeshVariable( - name + R"^{[" + str(i) + R"]}", - self.swarm.mesh, - num_components=1, - degree=proxy_degree, - continuous=proxy_continuous, - ) + lname = name + R"^{[" + str(i) + R"]}" + if proxy_location == "integration_points": + self._meshLevelSetVars[i] = uw.discretisation.IntegrationPointVariable( + lname, self.swarm.mesh, + ) + elif proxy_location == "cells": + self._meshLevelSetVars[i] = uw.discretisation.MeshVariable( + lname, self.swarm.mesh, num_components=1, + degree=proxy_degree, continuous=False, + ) + else: + self._meshLevelSetVars[i] = uw.discretisation.MeshVariable( + lname, self.swarm.mesh, num_components=1, + degree=proxy_degree, continuous=proxy_continuous, + ) self._MaskArray[0, i] = self._meshLevelSetVars[i].sym[0, 0] # Initialize lazy evaluation state @@ -2651,6 +2667,69 @@ def view(self): uw.pprint(f"IndexSwarmVariable {self}") uw.pprint(f"Numer of indices {self.indices}") + def _update_index_proxies_from_particles(self): + r"""Fill the level sets directly from the particles, with no nodal step. + + ``proxy_location="integration_points"``: every integration point takes + the material of its NEAREST PARTICLE, so each level set is exactly 0 or + 1 there and the masks sum to 1 by construction. That is the Ellipsis / + Underworld particle-in-cell material mapping: the interface keeps its + sub-cell position, no node averages two materials, and no + reconstruction can overshoot into a negative viscosity. + + ``proxy_location="cells"``: each level set is the least-squares + polynomial through the cell's own particle indicators + (:class:`~underworld3.utilities.cell_polynomial_projection.CellPolynomialProjector`), + clamped to :math:`[0, 1]` and renormalised so the masks still sum to 1. + A material fraction per cell, with a gradient, sharp at cell edges. + """ + from underworld3.utilities.cell_polynomial_projection import CellPolynomialProjector + + # Collective read/write sequence: every rank walks the same variables + # (only the values differ), as in the nodal path's starved-rank guard. + starved = self.swarm.local_size <= 1 + if starved: + if self.swarm._population_generation > 0: + import warnings + + warnings.warn( + f"IndexSwarmVariable proxy update: rank {uw.mpi.rank} holds " + f"{max(self.swarm.local_size, 0)} particles; level-set " + f"variables for '{self.clean_name}' left unchanged on this rank.", + stacklevel=2, + ) + for var in self._meshLevelSetVars: + var.data[:, 0] = var.data[:, 0] # keep, but write collectively + return + + Xp = np.asarray(self.swarm._particle_coordinates.data) + idx = np.asarray(self.data).reshape(-1).astype(int) + indicator = (idx[:, None] == np.arange(self.indices)[None, :]).astype(float) + + if self._proxy_location == "integration_points": + tree = uw.kdtree.KDTree(Xp) + for ii, var in enumerate(self._meshLevelSetVars): + _, nearest = tree.query(np.asarray(var.coords_nd), k=1, sqr_dists=False) + var.data[:, 0] = indicator[np.asarray(nearest).reshape(-1), ii] + return + + # "cells": one fit for every index at once (the level sets share a basis) + projector = self._cell_projector + if (projector is None or projector.var is not self._meshLevelSetVars[0] + or projector.mesh_version != self.swarm.mesh._mesh_version): + projector = CellPolynomialProjector(self._meshLevelSetVars[0]) + self._cell_projector = projector + old = np.column_stack([np.asarray(v.data[:, 0]) for v in self._meshLevelSetVars]) + U = projector.fit(Xp, indicator, old=old) + # A fitted indicator can leave [0, 1]; clamp, then renormalise so the + # masks remain a partition of unity (createMask stays a weighted mean). + U = np.clip(U, 0.0, 1.0) + total = U.sum(axis=1) + good = total > 1.0e-12 + U[good] /= total[good, None] + for ii, var in enumerate(self._meshLevelSetVars): + var.data[:, 0] = U[:, ii] + def _update_proxy_variables(self): """ This method updates the proxy mesh (vector) variable for the index variable on the current swarm locations @@ -2669,7 +2748,12 @@ def _update_proxy_variables(self): update_type 0: assign the particles to the nearest mesh_levelset nodes, and calculate the value on nodes from them. update_type 1: calculate the material property value on mesh_levelset nodes from the nearest N particles directly. + ``proxy_location`` other than ``"nodes"`` takes neither route: see + :meth:`_update_index_proxies_from_particles`. """ + if self._proxy_location != "nodes": + self._update_index_proxies_from_particles() + return # Starved-rank guard (SWARM-07): with <= 1 local particles the # nearest-neighbour machinery cannot run — KDTree construction on an # empty coordinate array raises IndexError, aborting/hanging the @@ -4965,6 +5049,7 @@ def repopulate( values=None, nnn=None, order=0, + nearest=None, verbose=False, ): """Add particles to cells that hold too few, remove from cells that hold @@ -5002,6 +5087,12 @@ def repopulate( order : {0, 1}, optional RBF reconstruction order for new particles: 0 bounded (default), 1 linear-exact. + nearest : list, optional + Variables (or names) a new particle takes whole from its nearest + existing neighbour instead of by reconstruction. INTEGER-valued + variables are always in this set: a material index is a label, and + the average of two labels is not a label. Use it for any other + field that must stay one of its own values. Returns ------- @@ -5082,9 +5173,16 @@ def repopulate( nnn = min(nnn, max(n_old, 1)) rbf_order = order if nnn >= dim + 2 else 0 operator = None + nearest_row = None if n_old > 0: - operator = uw.kdtree.KDTree(X).interpolation_matrix( + tree = uw.kdtree.KDTree(X) + operator = tree.interpolation_matrix( np.asarray(new_coords), nnn=nnn, p=2, order=rbf_order) + _, nearest_row = tree.query(np.asarray(new_coords), k=1) + nearest_row = np.asarray(nearest_row).reshape(-1) + nearest_set = set() + for item in (nearest or ()): + nearest_set.add(item if isinstance(item, str) else getattr(item, "clean_name", item)) # raw values of every variable at the old particles, BEFORE the add raw_old = {} for name, var in self._vars.items(): @@ -5117,15 +5215,24 @@ def repopulate( continue spec = values.get(var, values.get(name, values.get(var.clean_name))) ncomp = raw_old[name].shape[1] if n_old > 0 else var.num_components + # A label cannot be averaged: integer variables (a material + # index) take their nearest neighbour's value whole. + take_nearest = ( + name in nearest_set + or var.clean_name in nearest_set + or np.issubdtype(np.dtype(getattr(var, "_petsc_dtype", float)), np.integer) + ) if spec is not None: vals = spec(np.asarray(new_coords)) if callable(spec) else spec vals = np.broadcast_to(np.asarray(vals, dtype=float).reshape(n_new, -1) if np.ndim(vals) > 0 else vals, (n_new, ncomp)) + elif take_nearest and nearest_row is not None: + vals = raw_old[name][nearest_row] elif operator is not None: vals = operator @ raw_old[name] else: vals = np.zeros((n_new, ncomp)) f = self.dm.getField(var.clean_name).reshape((-1, ncomp)) - f[n_old:, :] = np.asarray(vals).reshape(n_new, ncomp) + f[n_old:, :] = np.asarray(vals).reshape(n_new, ncomp).astype(f.dtype, copy=False) self.dm.restoreField(var.clean_name) added = n_new self._invalidate_canonical_data() diff --git a/tests/test_0071_index_swarm_proxy_location.py b/tests/test_0071_index_swarm_proxy_location.py new file mode 100644 index 000000000..905f74b88 --- /dev/null +++ b/tests/test_0071_index_swarm_proxy_location.py @@ -0,0 +1,137 @@ +"""A material index read at the integration points, or as a fraction per cell. + +``IndexSwarmVariable(..., proxy_location=...)`` chooses where the level sets +live. At the integration points each one is exactly 0 or 1 (the material of +the nearest particle), which is what keeps a layered viscosity exact; per +cell they are a polynomial fraction, clamped and renormalised so the masks +still sum to one. +""" + +import numpy as np +import pytest +import sympy + +import underworld3 as uw + +pytestmark = [pytest.mark.level_1, pytest.mark.tier_a] + + +def _layered(tag, location, cell_size=0.1, fill=3, degree=1, h=0.5): + mesh = uw.meshing.UnstructuredSimplexBox(cellSize=cell_size, qdegree=2, regular=True) + swarm = uw.swarm.Swarm(mesh) + mat = uw.swarm.IndexSwarmVariable(tag, swarm, indices=2, proxy_degree=degree, + proxy_location=location) + swarm.populate(fill_param=fill) + X = np.asarray(swarm._particle_coordinates.data) + with uw.synchronised_array_update(): + mat.data[:, 0] = (X[:, 1] > h).astype(int) + return mesh, swarm, mat + + +@pytest.mark.parametrize("location", ["nodes", "integration_points", "cells"]) +def test_masks_are_bounded_and_sum_to_one(location): + mesh, swarm, mat = _layered(f"P{location[:4]}", location) + for var in mat._meshLevelSetVars: + d = np.asarray(var.data[:, 0]) + assert d.min() >= -1e-12 and d.max() <= 1 + 1e-12, (d.min(), d.max()) + total = sum(np.asarray(v.data[:, 0]) for v in mat._meshLevelSetVars) + assert np.allclose(total, 1.0, atol=1e-12) + # and through the weak form + assert abs(uw.maths.Integral(mesh, mat.sym[0] + mat.sym[1]).evaluate() - 1.0) < 1e-10 + + +def test_integration_point_masks_are_exactly_zero_or_one(): + """Each integration point takes the material of its nearest particle: a + label, not an average. That is what a nodal level set cannot do.""" + mesh, swarm, mat = _layered("Q", "integration_points") + for var in mat._meshLevelSetVars: + d = np.asarray(var.data[:, 0]) + assert set(np.unique(d).tolist()) <= {0.0, 1.0}, np.unique(d) + assert mat._meshLevelSetVars[0].is_integration_point + # the nodal proxy, by contrast, averages across the interface + _, _, nodal = _layered("N", "nodes") + d = np.asarray(nodal._meshLevelSetVars[0].data[:, 0]) + assert ((d > 1e-6) & (d < 1 - 1e-6)).any() + + +def test_layered_couette_is_exact_at_the_integration_points(): + """Interface on mesh edges: the exact velocity is in the P2 space, so the + only error is the material representation.""" + eta_top, h = 1.0e3, 0.5 + results = {} + for location in ("nodes", "integration_points"): + mesh, swarm, mat = _layered(f"C{location[:4]}", location, h=h) + v = uw.discretisation.MeshVariable(f"v{location[:4]}", mesh, mesh.dim, degree=2) + p = uw.discretisation.MeshVariable(f"p{location[:4]}", mesh, 1, degree=1) + stokes = uw.systems.Stokes(mesh, velocityField=v, pressureField=p) + stokes.constitutive_model = uw.constitutive_models.ViscousFlowModel + stokes.constitutive_model.Parameters.shear_viscosity_0 = mat.createMask([1.0, eta_top]) + stokes.add_dirichlet_bc((1.0, 0.0), "Top") + stokes.add_dirichlet_bc((0.0, 0.0), "Bottom") + stokes.add_dirichlet_bc((sympy.oo, 0.0), "Left") + stokes.add_dirichlet_bc((sympy.oo, 0.0), "Right") + stokes.tolerance = 1e-8 + stokes.solve() + A = 1.0 / (h + (1.0 - h) / eta_top) + Xv = np.asarray(v.coords) + exact = np.where(Xv[:, 1] < h, A * Xv[:, 1], A * h + A / eta_top * (Xv[:, 1] - h)) + results[location] = np.abs(np.asarray(v.data[:, 0]) - exact).max() + assert results["integration_points"] < 1e-5, results + assert results["nodes"] > 1e-2, results # the control + + +def test_repopulation_keeps_a_material_index_a_label(): + """A new particle takes its nearest neighbour's index whole: averaging two + labels does not give a label.""" + mesh = uw.meshing.UnstructuredSimplexBox(cellSize=0.15, qdegree=2) + swarm = uw.swarm.Swarm(mesh) + mat = uw.swarm.IndexSwarmVariable("R", swarm, indices=3, proxy_location="integration_points") + scalar = uw.swarm.SwarmVariable("Rs", swarm, 1) + swarm.populate(fill_param=3) + X = np.asarray(swarm._particle_coordinates.data) + with uw.synchronised_array_update(): + mat.data[:, 0] = np.digitize(X[:, 1], [0.33, 0.66]) + scalar.data[:, 0] = X[:, 0] + for i in np.sort(np.nonzero(X[:, 0] < 0.4)[0])[::-1]: + swarm.dm.removePointAtIndex(int(i)) + swarm._invalidate_canonical_data() + added, _ = swarm.repopulate(order=1) + from mpi4py import MPI + assert uw.mpi.comm.allreduce(added, op=MPI.SUM) > 0 # added is rank-local + Xn = np.asarray(swarm._particle_coordinates.data) + idx = np.asarray(mat.data[:, 0]) + assert set(np.unique(idx).tolist()) <= {0, 1, 2}, np.unique(idx) + # right material for all but the particles nearest an interface + if idx.shape[0] > 0: + assert np.mean(idx == np.digitize(Xn[:, 1], [0.33, 0.66])) > 0.9 + # a float field is still reconstructed, not copied from one neighbour + assert np.abs(np.asarray(scalar.data[:, 0]) - Xn[:, 0]).max() < 1e-10 + + +def test_population_control_keeps_an_extending_box_sampled(): + """Pure shear with outflow sides and inflow top and bottom: without + population control the inflow cells empty.""" + mesh = uw.meshing.UnstructuredSimplexBox(minCoords=(-1.0, -0.5), maxCoords=(1.0, 0.5), + cellSize=0.15, qdegree=2) + mesh.return_coords_to_bounds = None + x, y = mesh.X + V = sympy.Matrix([[x, -y]]) + c0, c1 = mesh.dm.getHeightStratum(0) + + def empty_cells(swarm): + P = np.asarray(swarm._particle_coordinates.data) + cells = np.asarray(mesh._robust_owning_cells(P)) + return int((np.bincount(cells[cells >= 0], minlength=c1 - c0) == 0).sum()) + + counts = {} + for control in (False, True): + swarm = uw.swarm.Swarm(mesh) + swarm.populate(fill_param=3) + if control: + swarm.population_control = dict(min_per_cell=6) + for _ in range(10): + swarm.advection(V, 0.1, order=2) + counts[control] = empty_cells(swarm) + from mpi4py import MPI + assert uw.mpi.comm.allreduce(counts[True], op=MPI.SUM) == 0, counts + assert uw.mpi.comm.allreduce(counts[False], op=MPI.SUM) > 0, counts From 7741b1c03f5781da0fe50226c5c6d757e9f4b38f Mon Sep 17 00:00:00 2001 From: lmoresi Date: Wed, 9 Sep 2026 14:47:01 -0700 Subject: [PATCH 02/10] Review (#715): IndexSwarmVariable stored the wrong proxy_location; four review findings The base SwarmVariable constructor sets _proxy_location from its own default and runs AFTER the subclass assignment, so an IndexSwarmVariable built with proxy_location="integration_points" stored "nodes" and the new fill never dispatched: the level sets were the right kind of variable, filled by the nodal inverse-distance algorithm. Assign after super().__init__. Re-measured with the dispatch live, the layered Couette test changes for the better: with the interface on mesh edges every particle in a cell is on one side, so the per-cell fit is constant and "cells" is exact too (1.8e-7, was 4.9e-2 through the nodal algorithm). The distinction shows in the cut-cell case, now documented: only the integration-point mapping improves with particle density (3.5e-2 to 1.9e-2 from 10 to 55 particles per cell, against 8.4e-2 to 7.7e-2 for nodes and 4.1e-2 flat for cells). Copilot's findings, all fixed: the starved-rank guard was `local_size <= 1`, but one particle is a well-defined nearest-particle answer, so only a rank with none is starved; `nearest="M"` iterated the characters of the string; two documented example paths were missing the intermediate/ directory; and an example comment credited `nearest=` for what happens automatically for integer variables. Underworld development team with AI support from Claude Code Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01MSGAFeA7qYXgkuw9ud8F2G --- docs/advanced/figures/material_index.png | Bin 102161 -> 101287 bytes .../figures/repopulation_particles.png | Bin 174483 -> 174394 bytes .../particle-population-and-materials.md | 46 ++++++++++++------ .../Ex_Swarm_Population_Control.py | 5 +- src/underworld3/swarm.py | 19 ++++++-- tests/test_0071_index_swarm_proxy_location.py | 38 +++++++++++++++ 6 files changed, 88 insertions(+), 20 deletions(-) diff --git a/docs/advanced/figures/material_index.png b/docs/advanced/figures/material_index.png index 98aa69b77089d8a26acd2e9e7550f6513f8916ff..3fcb3826f4670b3a7e9dfb5c15442e7970c64e33 100644 GIT binary patch literal 101287 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


Zqz{g|o+X|w$osXtp27?G56BJs@iKK5;9hx&*o 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 literal 102161 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 I_kcz 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

O6@My7h%<_&voL)Kn} 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 I%9w@xAFI=q2LJ#7 diff --git a/docs/advanced/particle-population-and-materials.md b/docs/advanced/particle-population-and-materials.md index bf6deb4a8..3e4f76850 100644 --- a/docs/advanced/particle-population-and-materials.md +++ b/docs/advanced/particle-population-and-materials.md @@ -55,7 +55,7 @@ costs accuracy. ### Demonstration -`docs/examples/utilities/Ex_Swarm_Population_Control.py`. Pure-shear extension +`docs/examples/utilities/intermediate/Ex_Swarm_Population_Control.py`. Pure-shear extension $\mathbf{v} = (x, -y)$ on a fixed mesh, so the side walls are outflow and the top and bottom are inflow, with a marker layer through the middle. Particles that leave are deleted (`mesh.return_coords_to_bounds = None`), which is what @@ -110,7 +110,7 @@ material = uw.swarm.IndexSwarmVariable( ### Demonstration -`docs/examples/utilities/Ex_Swarm_Material_Index.py`. Two viscosity layers, +`docs/examples/utilities/intermediate/Ex_Swarm_Material_Index.py`. Two viscosity layers, 1 and 1000, carried as a material index and driven from the top. With the interface on mesh edges the exact velocity is piecewise linear and lies in the P2 velocity space, so the only error in the solve is how the material is @@ -120,26 +120,44 @@ represented. :alt: The material mask across the interface and the resulting velocity error Left: the upper-material mask along a line crossing the interface, as the weak -form sees it. The nodal level set ramps linearly across a whole cell. At the -integration points it is a step in the right place. Right: the resulting error -in the velocity against the exact layered flow. +form sees it. The nodal level set ramps linearly across a whole cell; the other +two are a step in the right place and lie on top of each other. Right: the +resulting error in the velocity against the exact layered flow. ``` | `proxy_location` | assembled $\int \eta$ (exact 500.5) | velocity $L_2$ error | |---|---|---| | `"nodes"` | 500.5000 | 8.0e-2 | | `"integration_points"` | 500.5000 | **1.8e-7** | -| `"cells"` | 500.5000 | 4.9e-2 | +| `"cells"` | 500.5000 | **1.8e-7** | All three integrate the viscosity correctly in the mean, which is why the -error does not show up in a bulk diagnostic. Only the integration-point -mapping puts the viscosity contrast in the right place, and it solves the -layered problem to solver tolerance. - -The `"cells"` option is the one to reach for when the material property needs -a gradient (the level sets are polynomials, and can be differentiated) or when -the field is a fraction rather than a label. For a pure material index at an -interface, `"integration_points"` is the sharper of the two. +error does not show up in a bulk diagnostic. Only the placement differs, and +the placement is what the solve feels. Every particle in a cell is on the same +side of an edge-aligned interface, so the per-cell fit is constant and the +`"cells"` mapping is exact here too. + +### When the interface cuts through a cell + +Move the interface to $y = 0.53$ on an irregular mesh and no scheme can be +exact: the P2 velocity cannot hold a kink inside a cell. What separates them +is whether adding particles helps. + +| `proxy_location` | $L_2$ error, 10 particles per cell | 55 per cell | +|---|---|---| +| `"nodes"` | 8.4e-2 | 7.7e-2 | +| `"integration_points"` | 3.5e-2 | **1.9e-2** | +| `"cells"` | 4.1e-2 | 4.1e-2 | + +The integration-point mapping resolves the interface within the cell, so it +improves as the particles do. The other two are limited by what a cell-scale +representation can express, and adding particles does not move them. + +Use `"cells"` when the material property needs a gradient (the level sets are +polynomials and can be differentiated) or when the field is genuinely a +fraction rather than a label; note that a fitted fraction can leave $[0, 1]$ +between cells even though its own degrees of freedom are clamped. For a +material index at an interface, `"integration_points"` is the one to use. ## What this rests on diff --git a/docs/examples/utilities/intermediate/Ex_Swarm_Population_Control.py b/docs/examples/utilities/intermediate/Ex_Swarm_Population_Control.py index 329954b7e..179f2286a 100644 --- a/docs/examples/utilities/intermediate/Ex_Swarm_Population_Control.py +++ b/docs/examples/utilities/intermediate/Ex_Swarm_Population_Control.py @@ -67,8 +67,9 @@ M.data[:, 0] = (np.abs(X0[:, 1]) < 0.2).astype(int) # a central layer if POPCTL: - # Refill starved cells. Material of a new particle: its nearest neighbour's - # (an index is not an average), which is what `nearest=` selects. + # Refill starved cells. A new particle takes the material of its nearest + # neighbour: repopulate() does that for any INTEGER variable without being + # asked, because the average of two material labels is not a label. swarm.population_control = dict(min_per_cell=6) c0, c1 = mesh.dm.getHeightStratum(0) diff --git a/src/underworld3/swarm.py b/src/underworld3/swarm.py index 27ce4910b..d40843b3e 100644 --- a/src/underworld3/swarm.py +++ b/src/underworld3/swarm.py @@ -2412,7 +2412,6 @@ def __init__( "proxy_location must be 'nodes', 'integration_points' or 'cells', " f"not {proxy_location!r}" ) - self._proxy_location = proxy_location self._cell_projector = None self.nnn = npoints self.radius_s = radius # **2 # changed to radius @@ -2433,6 +2432,11 @@ def __init__( _proxy=False, varsymbol=varsymbol, ) + # AFTER super().__init__, which sets _proxy_location from its own + # default (this class does not forward the argument, since the base + # single-proxy _meshVar is not built here at all). + self._proxy_location = proxy_location + # The indices variable defines how many "level set" maps we create as components in the proxy variable import sympy @@ -2687,7 +2691,11 @@ def _update_index_proxies_from_particles(self): # Collective read/write sequence: every rank walks the same variables # (only the values differ), as in the nodal path's starved-rank guard. - starved = self.swarm.local_size <= 1 + # One particle is enough here, unlike the nodal path's weighted + # average: the nearest-particle answer is well defined from a single + # particle, and the cell fit falls back to its patch. Only a rank with + # NO particles has nothing to say. + starved = self.swarm.local_size < 1 if starved: if self.swarm._population_generation > 0: import warnings @@ -5087,7 +5095,7 @@ def repopulate( order : {0, 1}, optional RBF reconstruction order for new particles: 0 bounded (default), 1 linear-exact. - nearest : list, optional + nearest : variable, name, or list of them, optional Variables (or names) a new particle takes whole from its nearest existing neighbour instead of by reconstruction. INTEGER-valued variables are always in this set: a material index is a label, and @@ -5180,8 +5188,11 @@ def repopulate( np.asarray(new_coords), nnn=nnn, p=2, order=rbf_order) _, nearest_row = tree.query(np.asarray(new_coords), k=1) nearest_row = np.asarray(nearest_row).reshape(-1) + nearest_spec = nearest or () + if isinstance(nearest_spec, str) or not hasattr(nearest_spec, "__iter__"): + nearest_spec = (nearest_spec,) # a bare name or variable nearest_set = set() - for item in (nearest or ()): + for item in nearest_spec: nearest_set.add(item if isinstance(item, str) else getattr(item, "clean_name", item)) # raw values of every variable at the old particles, BEFORE the add raw_old = {} diff --git a/tests/test_0071_index_swarm_proxy_location.py b/tests/test_0071_index_swarm_proxy_location.py index 905f74b88..61cf1f024 100644 --- a/tests/test_0071_index_swarm_proxy_location.py +++ b/tests/test_0071_index_swarm_proxy_location.py @@ -135,3 +135,41 @@ def empty_cells(swarm): from mpi4py import MPI assert uw.mpi.comm.allreduce(counts[True], op=MPI.SUM) == 0, counts assert uw.mpi.comm.allreduce(counts[False], op=MPI.SUM) > 0, counts + + +def test_nearest_accepts_a_bare_name_and_a_single_particle_rank_is_not_starved(): + """`nearest="F"` names one variable, not five characters; and one particle + is enough for the nearest-particle mapping (only a rank with none is).""" + mesh = uw.meshing.UnstructuredSimplexBox(cellSize=0.2, qdegree=2) + swarm = uw.swarm.Swarm(mesh) + flag = uw.swarm.SwarmVariable("Flag", swarm, 1) + swarm.populate(fill_param=3) + X = np.asarray(swarm._particle_coordinates.data) + with uw.synchronised_array_update(): + flag.data[:, 0] = (X[:, 0] > 0.5).astype(float) + for i in np.sort(np.nonzero(X[:, 0] < 0.4)[0])[::-1]: + swarm.dm.removePointAtIndex(int(i)) + swarm._invalidate_canonical_data() + swarm.repopulate(nearest="Flag") + vals = np.asarray(flag.data[:, 0]) + if vals.shape[0] > 0: # a float field, kept as a label + assert set(np.unique(vals).tolist()) <= {0.0, 1.0}, np.unique(vals) + + # one particle: the nearest-particle mapping is still well defined + mesh2 = uw.meshing.UnstructuredSimplexBox(cellSize=0.35, qdegree=2) + swarm2 = uw.swarm.Swarm(mesh2) + mat = uw.swarm.IndexSwarmVariable("One", swarm2, indices=2, + proxy_location="integration_points") + swarm2.populate(fill_param=2) + keep = 1 if swarm2.local_size > 0 else 0 + for i in range(swarm2.local_size - 1, keep - 1, -1): + swarm2.dm.removePointAtIndex(int(i)) + swarm2._invalidate_canonical_data() + if swarm2.local_size == 1: + with uw.synchronised_array_update(): + mat.data[:, 0] = 1 + mat._proxy_stale = True + mat._update_proxy_if_stale() + d = np.asarray(mat._meshLevelSetVars[1].data[:, 0]) + if swarm2.local_size == 1: + assert np.allclose(d, 1.0), d[:5] # every point takes that particle From 0b0e09d559517fcbe69f2270929957cc1c91bbd9 Mon Sep 17 00:00:00 2001 From: lmoresi Date: Wed, 9 Sep 2026 15:03:27 -0700 Subject: [PATCH 03/10] Frame the material-index page around what the symbol can do, with a capability test First class means the particle field's symbol goes where a mesh variable's symbol goes. Measured, for all three proxy targets: arithmetic with mesh variables and sympy, uw.maths.Integral, uw.function.evaluate anywhere, projection onto a mesh variable, and a solver term (viscosity and body force at once) all work. The one exception is a gradient of the integration-point form, which is refused rather than answered wrongly: the element that holds a value at each integration point has no gradient to give. The page now says that first, since the choice of proxy changes where the sampling lands and not what you can write; the accuracy tables stay as the reason to prefer one target. Underworld development team with AI support from Claude Code Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01MSGAFeA7qYXgkuw9ud8F2G --- .../particle-population-and-materials.md | 33 +++++++++-- tests/test_0071_index_swarm_proxy_location.py | 58 +++++++++++++++++++ 2 files changed, 87 insertions(+), 4 deletions(-) diff --git a/docs/advanced/particle-population-and-materials.md b/docs/advanced/particle-population-and-materials.md index 3e4f76850..846f71faa 100644 --- a/docs/advanced/particle-population-and-materials.md +++ b/docs/advanced/particle-population-and-materials.md @@ -12,7 +12,9 @@ integrating, however hard the flow deforms the swarm. **A material index read where the assembler actually looks** keeps a material interface where the particles put it, instead of smearing it over a cell. -Both are demonstrated below with runnable scripts. +Both are demonstrated below with runnable scripts. Neither changes how you +write anything: a particle field reaches the mathematics through a proxy, and +what the proxy changes is where the sampling happens, not what you can say. ## Population control @@ -80,16 +82,25 @@ inflow side, where the flow brings nothing. ## A material index at the integration points +A particle field is a first-class citizen of the symbolic algebra: it carries +a symbol, and that symbol goes wherever a mesh variable's symbol goes. `IndexSwarmVariable` carries a material label per particle and presents the -mesh with one level set per material, so that `createMask` can build a -material-weighted property: +mesh with one level set per material, so that `createMask` builds a +material-weighted property that you then use like any other expression: ```python material = uw.swarm.IndexSwarmVariable("M", swarm, indices=2, proxy_degree=1) viscosity = material.createMask([1.0, 1000.0]) + +stokes.constitutive_model.Parameters.shear_viscosity_0 = viscosity +stokes.bodyforce = sympy.Matrix([[0, -material.sym[1] * (1 + T.sym[0])]]) +heat = uw.maths.Integral(mesh, material.sym[1] * T.sym[0]).evaluate() ``` -Where those level sets live is now a choice: +That works through a proxy: the particle values are reconstructed onto a mesh +object the assembler can read, and the symbol you write is the proxy's. Where +that proxy lives is now a choice, and it changes only where the reconstruction +lands: | `proxy_location` | the level sets are | at an interface | |---|---|---| @@ -108,6 +119,20 @@ material = uw.swarm.IndexSwarmVariable( "M", swarm, indices=2, proxy_location="integration_points") ``` +Everything the symbol could do before, it still does. The one exception is a +derivative of the integration-point form: the element that holds a value at +each integration point has no gradient to give, so the compiler refuses one +rather than returning a wrong number. + +| | `"nodes"` | `"integration_points"` | `"cells"` | +|---|---|---|---| +| arithmetic with mesh variables and `sympy` | yes | yes | yes | +| `uw.maths.Integral` | yes | yes | yes | +| `uw.function.evaluate` anywhere | yes | yes | yes | +| projection onto a mesh variable | yes | yes | yes | +| viscosity, body force, any solver term | yes | yes | yes | +| a **gradient** of the expression | yes | refused | yes | + ### Demonstration `docs/examples/utilities/intermediate/Ex_Swarm_Material_Index.py`. Two viscosity layers, diff --git a/tests/test_0071_index_swarm_proxy_location.py b/tests/test_0071_index_swarm_proxy_location.py index 61cf1f024..383d6554a 100644 --- a/tests/test_0071_index_swarm_proxy_location.py +++ b/tests/test_0071_index_swarm_proxy_location.py @@ -173,3 +173,61 @@ def test_nearest_accepts_a_bare_name_and_a_single_particle_rank_is_not_starved() d = np.asarray(mat._meshLevelSetVars[1].data[:, 0]) if swarm2.local_size == 1: assert np.allclose(d, 1.0), d[:5] # every point takes that particle + + +@pytest.mark.parametrize("location", ["nodes", "integration_points", "cells"]) +def test_the_symbol_participates_in_expressions(location): + """First class means the symbol goes where a mesh variable's symbol goes: + arithmetic, integrals, evaluation, projection, a solver term. Only a + gradient of the integration-point form is refused, because the element + that holds a value at each integration point has no gradient.""" + mesh = uw.meshing.UnstructuredSimplexBox(cellSize=0.2, qdegree=2) + x, y = mesh.X + tag = location[:4] + T = uw.discretisation.MeshVariable(f"T{tag}", mesh, 1, degree=2) + T.data[:, 0] = np.asarray(T.coords)[:, 0] + swarm = uw.swarm.Swarm(mesh) + mat = uw.swarm.IndexSwarmVariable(f"E{tag}", swarm, indices=2, proxy_location=location) + fld = uw.swarm.SwarmVariable(f"F{tag}", swarm, 1, proxy_location=location) + swarm.populate(fill_param=3) + X = np.asarray(swarm._particle_coordinates.data) + with uw.synchronised_array_update(): + mat.data[:, 0] = (X[:, 1] > 0.5).astype(int) + fld.data[:, 0] = X[:, 0] ** 2 + + # arithmetic with a mesh variable and with sympy, under an integral + assert np.isfinite(uw.maths.Integral( + mesh, mat.sym[1] * T.sym[0] + sympy.sin(x) * fld.sym[0]).evaluate()) + # evaluation at arbitrary points + got = uw.function.evaluate(mat.sym[1] + fld.sym[0], np.array([[0.31, 0.42], [0.7, 0.8]])) + assert np.isfinite(np.asarray(got)).all() + # projection of a material-weighted property + P = uw.discretisation.MeshVariable(f"P{tag}", mesh, 1, degree=1) + proj = uw.systems.solvers.SNES_Projection(mesh, P) + proj.uw_function = mat.createMask([1.0, 5.0]) + proj.solve() + # both material values are recovered; a continuous projection of a sharp + # mask overshoots at the interface, which is the projection's business + Pv = np.asarray(P.data) + assert Pv.max() > 4.5 and Pv.min() < 1.5, (Pv.min(), Pv.max()) + # a solver term: viscosity and body force at once + v = uw.discretisation.MeshVariable(f"v{tag}", mesh, mesh.dim, degree=2) + q = uw.discretisation.MeshVariable(f"q{tag}", mesh, 1, degree=1) + stokes = uw.systems.Stokes(mesh, velocityField=v, pressureField=q) + stokes.constitutive_model = uw.constitutive_models.ViscousFlowModel + stokes.constitutive_model.Parameters.shear_viscosity_0 = mat.createMask([1.0, 10.0]) + stokes.bodyforce = sympy.Matrix([[0, -mat.sym[1] * (1 + T.sym[0])]]) + for b in ("Top", "Bottom"): + stokes.add_dirichlet_bc((0.0, 0.0), b) + for b in ("Left", "Right"): + stokes.add_dirichlet_bc((sympy.oo, 0.0), b) + stokes.solve() + assert np.abs(np.asarray(v.data)).max() > 0 + + # the gradient: available except at the integration points + grad = uw.maths.Integral(mesh, fld.sym[0].diff(x) ** 2) + if location == "integration_points": + with pytest.raises(RuntimeError, match="integration-point"): + grad.evaluate() + else: + assert grad.evaluate() > 0 From fbdc6220ac30d3339c69ce72fb16300e880f721f Mon Sep 17 00:00:00 2001 From: lmoresi Date: Wed, 9 Sep 2026 15:14:30 -0700 Subject: [PATCH 04/10] The gradient of a particle field: point the refusal at the cell fit, and measure it Louis asked whether the gradient could come from a projection through the integration points. It can, and the machinery already computes it: the "cells" proxy IS that projection, a least-squares polynomial per cell, so it differentiates directly and with no global solve. Measured, recovering d/dx of a quadratic particle field: cells degree 2 2.4e-7, nodes degree 2 1.1e-4, an explicit global L2 projection onto P2 then differentiate 1.1e-4, cells degree 1 1.3e-3, nodes degree 1 2.1e-3. The per-cell fit wins because it is local and exact for polynomials up to its degree. The integration-point form still refuses a derivative, since its own tabulated gradient is identically zero and answering would be a silent zero, but the message now names the remedy instead of leaving the reader to find it. Documented with the table, and tested. Underworld development team with AI support from Claude Code Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01MSGAFeA7qYXgkuw9ud8F2G --- .../particle-population-and-materials.md | 21 +++++++++++- src/underworld3/utilities/_jitextension.py | 9 +++-- tests/test_0071_index_swarm_proxy_location.py | 33 +++++++++++++++++++ 3 files changed, 60 insertions(+), 3 deletions(-) diff --git a/docs/advanced/particle-population-and-materials.md b/docs/advanced/particle-population-and-materials.md index 846f71faa..2988c9b9e 100644 --- a/docs/advanced/particle-population-and-materials.md +++ b/docs/advanced/particle-population-and-materials.md @@ -122,7 +122,26 @@ material = uw.swarm.IndexSwarmVariable( Everything the symbol could do before, it still does. The one exception is a derivative of the integration-point form: the element that holds a value at each integration point has no gradient to give, so the compiler refuses one -rather than returning a wrong number. +rather than returning the silent zero its tabulation would produce. + +The gradient is still available, from a projection of the same data, and +`"cells"` is that projection: its level sets are a least-squares polynomial +per cell, so they differentiate directly and with no global solve. Recovering +$\partial_x$ of a quadratic particle field: + +| where the proxy lives | gradient error | +|---|---| +| `"nodes"`, degree 1 | 2.1e-3 | +| `"nodes"`, degree 2 | 1.1e-4 | +| `"cells"`, degree 1 | 1.3e-3 | +| `"cells"`, degree 2 | **2.4e-7** | +| a global L2 projection onto P2, then differentiate | 1.1e-4 | +| `"integration_points"` | refused | + +The per-cell fit is the most accurate of them because it is local and exact +for polynomials up to its degree. So the rule is: sample at the integration +points when you want a value placed exactly, fit per cell when you want to +differentiate. | | `"nodes"` | `"integration_points"` | `"cells"` | |---|---|---|---| diff --git a/src/underworld3/utilities/_jitextension.py b/src/underworld3/utilities/_jitextension.py index 5301b43fb..5b72b5d1d 100644 --- a/src/underworld3/utilities/_jitextension.py +++ b/src/underworld3/utilities/_jitextension.py @@ -911,8 +911,13 @@ def _no_derivative(self, printer): raise RuntimeError( f"{self.__class__.__name__}: derivative of an integration-point " "variable has no meaning (the field is defined only at the " - "quadrature points). Remove the derivative or project the " - "variable onto a nodal MeshVariable first." + "quadrature points), so the gradient here would be a silent " + "zero. A gradient IS available from a projection of the same " + "data: for a swarm variable use proxy_location='cells', whose " + "level sets are a least-squares polynomial per cell and can be " + "differentiated (measured: degree 2 recovers the gradient of a " + "quadratic to 2e-7, against 1e-4 for a global L2 projection). " + "Otherwise project onto a MeshVariable and differentiate that." ) for var in varlist: diff --git a/tests/test_0071_index_swarm_proxy_location.py b/tests/test_0071_index_swarm_proxy_location.py index 383d6554a..02c963971 100644 --- a/tests/test_0071_index_swarm_proxy_location.py +++ b/tests/test_0071_index_swarm_proxy_location.py @@ -231,3 +231,36 @@ def test_the_symbol_participates_in_expressions(location): grad.evaluate() else: assert grad.evaluate() > 0 + + +def test_the_gradient_is_available_from_the_cell_fit(): + """The integration-point form has no gradient, but the same particle data + fitted per cell does, and it is the most accurate of the routes: the fit is + local and exact for polynomials up to its degree.""" + mesh = uw.meshing.UnstructuredSimplexBox(cellSize=0.1, qdegree=2) + x, y = mesh.X + pts = np.array([[0.31, 0.42], [0.62, 0.25], [0.5, 0.5]]) + exact = 2 * pts[:, 0] # d/dx of x^2 + 2y + + def gradient_error(tag, location, degree): + swarm = uw.swarm.Swarm(mesh) + var = uw.swarm.SwarmVariable(tag, swarm, 1, proxy_location=location, + proxy_degree=degree) + swarm.populate(fill_param=3) + X = np.asarray(swarm._particle_coordinates.data) + with uw.synchronised_array_update(): + var.data[:, 0] = X[:, 0] ** 2 + 2 * X[:, 1] + got = np.asarray(uw.function.evaluate(var.sym[0].diff(x), pts)).reshape(-1) + return np.abs(got - exact).max() + + cells2 = gradient_error("Gc2", "cells", 2) + nodes2 = gradient_error("Gn2", "nodes", 2) + assert cells2 < 1e-5, cells2 # exact for a quadratic + assert cells2 < nodes2 / 10, (cells2, nodes2) + + # the integration-point form refuses, and says where the gradient lives + swarm = uw.swarm.Swarm(mesh) + ip = uw.swarm.SwarmVariable("Gq", swarm, 1, proxy_location="integration_points") + swarm.populate(fill_param=3) + with pytest.raises(RuntimeError, match="proxy_location='cells'"): + uw.function.evaluate(ip.sym[0].diff(x), pts) From e56c1494b2b1b922aaccfa0658b1fe50463b3834 Mon Sep 17 00:00:00 2001 From: lmoresi Date: Wed, 9 Sep 2026 15:32:20 -0700 Subject: [PATCH 05/10] evaluate() recovers the gradient of an integration-point field; the weak form still refuses Louis: "Evaluate is not the same path as the residual calculation, after all." Right, and the guard was treating them alike. They are now deliberately different, and both say so: - A weak form still refuses a derivative of an integration-point variable. Answering would mean either the silent zero its own tabulation gives, or a reconstruction chosen behind the user's back and paid for at every assembly. Which discretisation the gradient comes from is a modelling decision, so it stays the user's: proxy_location="cells" gives level sets that are already polynomials. - uw.function.evaluate is a query and now answers, through _integration_point_sources_to_cell_fit: any integration-point source under a derivative is replaced by a per-cell least-squares fit of its own values (cached on the mesh like the other evaluate work variables), and the ordinary derivative machinery differentiates that. The fit is allowed to be exactly determined, since the rule is unisolvent for the degree; the default nmin would send every cell to the linear patch and leave the recovered gradient first order. Measured on a quadratic particle field: the recovered gradient converges, 2.4e-3 / 6.1e-4 / 2.6e-4 as the cell size halves from 1/5 to 1/20. The direct "cells" route reaches 2.4e-7, exact for a quadratic with nothing projected afterwards, so the docs point a solve there and call evaluate's answer a diagnostic. Stated in the user page, the developer subsystem page, the IntegrationPointVariable docstring, both SwarmVariable proxy_location docstrings, and the refusal message itself. Tested on both paths. Underworld development team with AI support from Claude Code Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01MSGAFeA7qYXgkuw9ud8F2G --- .../particle-population-and-materials.md | 24 ++++- .../subsystems/integration-point-variables.md | 26 ++++++ .../discretisation/enhanced_variables.py | 8 ++ src/underworld3/function/_function.pyx | 88 +++++++++++++++++++ src/underworld3/swarm.py | 24 +++-- src/underworld3/utilities/_jitextension.py | 13 +-- tests/test_0071_index_swarm_proxy_location.py | 18 +++- 7 files changed, 181 insertions(+), 20 deletions(-) diff --git a/docs/advanced/particle-population-and-materials.md b/docs/advanced/particle-population-and-materials.md index 2988c9b9e..648a6cb78 100644 --- a/docs/advanced/particle-population-and-materials.md +++ b/docs/advanced/particle-population-and-materials.md @@ -139,9 +139,27 @@ $\partial_x$ of a quadratic particle field: | `"integration_points"` | refused | The per-cell fit is the most accurate of them because it is local and exact -for polynomials up to its degree. So the rule is: sample at the integration -points when you want a value placed exactly, fit per cell when you want to -differentiate. +for polynomials up to its degree, and no further projection follows it. + +**Two paths, and the difference is deliberate.** A weak form and a query are +not the same thing: + +- **In a weak form**, a derivative of an integration-point field is *refused*. + Answering would mean either the silent zero its own tabulation gives, or a + reconstruction chosen behind your back and paid for at every assembly. + Which discretisation the gradient comes from is a modelling decision, so it + stays yours: build the variable with `proxy_location="cells"` and the level + sets are already polynomials. +- **`uw.function.evaluate`** is a query, and it *answers*. It fits the + integration-point values cell by cell and differentiates that, once, for + this call. The result converges (2.4e-3, 6.1e-4, 2.6e-4 for a quadratic + field as the cell size halves from 1/5 to 1/20) but it is a *recovered* + gradient, so treat it as a diagnostic rather than as the field's own + derivative. The `"cells"` route reaches 2.4e-7 on the same field. + +So the rule is: sample at the integration points when you want a value placed +exactly, fit per cell when you want to differentiate, and expect `evaluate` to +help you look at a gradient either way. | | `"nodes"` | `"integration_points"` | `"cells"` | |---|---|---|---| diff --git a/docs/developer/subsystems/integration-point-variables.md b/docs/developer/subsystems/integration-point-variables.md index b8edddcb5..9c8bb6b7b 100644 --- a/docs/developer/subsystems/integration-point-variables.md +++ b/docs/developer/subsystems/integration-point-variables.md @@ -69,6 +69,32 @@ symbol onto a `MeshVariable` explicitly with `SNES_Projection`; the projection of the field is an ordinary weak form and is exact for data that the target space can represent. + +### The derivative: refused in a weak form, recovered by `evaluate` + +An integration-point variable's tabulated gradient is identically zero, so a +derivative of its symbol would be a silent zero. The two paths are handled +differently on purpose: + +- **Code generation for a weak form** (`utilities/_jitextension.py`, + `_no_derivative`) raises. A hidden reconstruction inside a residual would be + a per-assembly cost and would decide a discretisation on the user's behalf. + The message names the remedy: `proxy_location="cells"`, whose level sets are + per-cell polynomials and differentiate directly. +- **`uw.function.evaluate`** (`function/_function.pyx`, + `_integration_point_sources_to_cell_fit`) substitutes any integration-point + source appearing under a derivative by a per-cell least-squares fit of its + own values, then lets the ordinary derivative machinery run. The fit is + allowed to be exactly determined (`nmin = Nb`) because the rule is unisolvent + for that degree; the default `Nb + 2` would send every cell to the linear + patch and leave the recovered gradient first order. + +Measured on `x^2 + 2y` carried at the integration points, the recovered +gradient converges: 2.4e-3, 6.1e-4, 2.6e-4 at cell sizes 1/5, 1/10, 1/20. The +direct `"cells"` route (degree 2, fitted from particles) gives 2.4e-7 on the +same field, because it is exact for a quadratic and nothing is projected +afterwards. + ## Guards The field has no gradient (its tabulated derivative is identically zero), so diff --git a/src/underworld3/discretisation/enhanced_variables.py b/src/underworld3/discretisation/enhanced_variables.py index 7c3b8e3cc..9a1388fa3 100644 --- a/src/underworld3/discretisation/enhanced_variables.py +++ b/src/underworld3/discretisation/enhanced_variables.py @@ -957,6 +957,14 @@ class IntegrationPointVariable(EnhancedMeshVariable): >>> eta_q.cell_data[...] = 1.0 # (ncells, Nq, 1) >>> eta_q.coords # the physical integration points >>> stokes.constitutive_model.Parameters.shear_viscosity_0 = eta_q.sym + + Gradients: this variable has none of its own (it stores a value at each + integration point and nothing between them, so its tabulated derivative is + identically zero). A derivative of its symbol in a WEAK FORM is refused + rather than answered with that zero; use a discontinuous mesh variable, or + ``SwarmVariable(proxy_location="cells")``, when a solve needs the gradient. + ``uw.function.evaluate`` of the same derivative does answer, by fitting the + values per cell first: a recovered gradient, for inspection. """ _base_variable_class = _BaseIntegrationPointVariable diff --git a/src/underworld3/function/_function.pyx b/src/underworld3/function/_function.pyx index 3fb4e9165..96540e25f 100644 --- a/src/underworld3/function/_function.pyx +++ b/src/underworld3/function/_function.pyx @@ -787,6 +787,88 @@ def _project_to_work_variable(expr, mesh, smoothing=1e-6): return work_var +def _integration_point_sources_to_cell_fit(expr, mesh, derivfns): + """Replace integration-point variables that appear under a derivative by a + per-cell least-squares fit of their own values, which does have a gradient. + + An integration-point variable holds a value at each integration point and + nothing between them: its tabulated gradient is identically zero, so both + the residual and an L2 projection of the derivative would return a silent + zero. The values themselves are good data, though, and fitting them cell by + cell (the reconstruction of + :class:`~underworld3.utilities.cell_polynomial_projection.CellPolynomialProjector`, + the same one behind ``SwarmVariable(proxy_location="cells")``) gives a + polynomial per cell that differentiates directly, with no projection solve. + + **Two paths, deliberately different.** ``uw.function.evaluate`` is a query: + it answers, by way of this recovery, and the answer converges (measured on + a quadratic particle field: 2.4e-3, 6.1e-4, 2.6e-4 as the cell size halves + from 1/5 to 1/20). Assembly of a weak form still REFUSES, because there a + hidden reconstruction would be a per-assembly cost and would quietly decide + a discretisation the user should choose. If a solve needs the gradient, + build the variable with ``proxy_location="cells"``, whose level sets are + already polynomials: that is both cheaper and sharper (2.4e-7 on the same + field, exact for a quadratic, because no further projection follows). + + Returns ``(expr, derivfns)`` with the substitutions applied. + """ + from underworld3.utilities.cell_polynomial_projection import CellPolynomialProjector + + ip_sources = [v for v in derivfns + if getattr(v, "is_integration_point", False)] + if not ip_sources: + return expr, derivfns + + subs = {} + for source_var in ip_sources: + # Degree: enough to carry a gradient, and no more than the rule can + # support (the fit falls back per cell when a cell is short of points). + degree = max(1, min(2, mesh.qdegree)) + # Cached on the mesh, like the other evaluate work variables: adding a + # field rebuilds the mesh DM, so one per (source, degree) and no more. + cache_key = f"_eval_ipgrad_{source_var.clean_name}_{degree}" + work = getattr(mesh, cache_key, None) + if work is None: + work = uw.discretisation.MeshVariable( + cache_key, mesh, source_var.shape, source_var.vtype, + degree=degree, continuous=False, + varsymbol=rf"{{ \widehat{{{source_var.symbol}}} }}", + ) + setattr(mesh, cache_key, work) + setattr(mesh, cache_key + "_projector", CellPolynomialProjector(work)) + projector = getattr(mesh, cache_key + "_projector") + if projector.mesh_version != mesh._mesh_version: + projector = CellPolynomialProjector(work) + setattr(mesh, cache_key + "_projector", projector) + # The rule has exactly as many points per cell as a fit of this degree + # has coefficients (that is what "the rule is unisolvent for P_k" + # means), so allow an exactly-determined fit: nmin = Nb rather than the + # default Nb + 2, which would send every cell to the linear patch and + # leave the gradient first order. The projector's own conditioning + # guard still catches a degenerate cell. + fitted = projector.fit( + np.asarray(source_var.coords_nd), + np.asarray(source_var.data).reshape(-1, source_var.num_components), + nmin=projector.Nb, + ) + work.data[...] = fitted.reshape(work.data.shape) + + src_flat, work_flat = source_var.sym_1d, work.sym_1d + for k in range(source_var.num_components): + subs[src_flat[k]] = work_flat[k] + for deriv_expr, diffindex in derivfns[source_var]: + subs[deriv_expr] = work_flat[deriv_expr.component].diff(mesh.X[diffindex]) + + expr = expr.subs(subs) if hasattr(expr, "subs") else expr + derivfns = {v: d for v, d in derivfns.items() if v not in ip_sources} + # the substituted derivatives are now derivatives of ordinary mesh + # variables; let the caller re-extract them + _, _, new_derivs = uw.function.fn_mesh_vars_in_expression(expr) + for v, d in new_derivs.items(): + derivfns.setdefault(v, d) + return expr, derivfns + + def _clement_to_work_variable(expr, mesh, derivfns): """ Evaluate expression at nodes using Clement gradient recovery (no solve). @@ -979,6 +1061,12 @@ def evaluate_nd( expr, # Two modes: # - Quick (rbf=True, force_l2=False): Clement gradient at nodes, no solve # - Accurate (force_l2=True or rbf=False): L2 projection, requires solve + if derivfns and mesh is not None: + # An integration-point source has no gradient of its own: fit its + # values per cell first, then the ordinary derivative machinery below + # differentiates a polynomial (see the helper). + expr, derivfns = _integration_point_sources_to_cell_fit(expr, mesh, derivfns) + if derivfns and mesh is not None: if evalf: raise RuntimeError( diff --git a/src/underworld3/swarm.py b/src/underworld3/swarm.py index d40843b3e..ade3688a8 100644 --- a/src/underworld3/swarm.py +++ b/src/underworld3/swarm.py @@ -152,13 +152,19 @@ class SwarmVariable(DimensionalityMixin, MathematicalMixin, Stateful, uw_object) reconstructed from the nearest particles at every integration point and read there directly, with no second interpolation (the Ellipsis / Underworld PIC-LIP mapping); a material interface keeps - its sub-cell position, and the proxy has no gradient (a derivative - of its symbol is refused). ``proxy_degree`` / ``proxy_continuous`` - are ignored in that case. ``"cells"``: a discontinuous mesh variable + its sub-cell position, and the proxy has no gradient of its own: a + derivative of its symbol in a WEAK FORM is refused (see ``"cells"`` + below for the remedy), while ``uw.function.evaluate`` of the same + derivative answers by fitting the values per cell first. + ``proxy_degree`` / ``proxy_continuous`` are ignored in that case. ``"cells"``: a discontinuous mesh variable of ``proxy_degree`` holding, in every cell, the least-squares polynomial through the particles that cell holds (a thin cell takes a linear fit to the particles nearest its centroid, an empty cell - keeps its previous value). Exact for + keeps its previous value). THIS is the target to choose when a solve + needs a gradient: the level sets are polynomials, so they + differentiate directly in a weak form, with no projection solve + (degree 2 recovers the gradient of a quadratic particle field to + 2e-7). Exact for polynomial particle fields up to ``proxy_degree``, integrated exactly by the default rule, sharp at cell edges, with a gradient, and no neighbour search across ranks; see @@ -2373,10 +2379,12 @@ class IndexSwarmVariable(SwarmVariable): ``"integration_points"``: every integration point takes the material of its NEAREST PARTICLE, so each level set is exactly 0 or 1 and the interface keeps its sub-cell position (the Ellipsis / Underworld - particle-in-cell material mapping). ``"cells"``: a polynomial material - fraction per cell, clamped to [0, 1] and renormalised, sharp at cell - edges and differentiable inside a cell. ``proxy_continuous`` applies - only to ``"nodes"``. + particle-in-cell material mapping); these level sets have no gradient, + so a derivative of the mask in a weak form is refused. ``"cells"``: a + polynomial material fraction per cell, clamped to [0, 1] and + renormalised, sharp at cell edges and DIFFERENTIABLE, which is the one + to choose when a solve needs the gradient of a material property. + ``proxy_continuous`` applies only to ``"nodes"``. Examples -------- diff --git a/src/underworld3/utilities/_jitextension.py b/src/underworld3/utilities/_jitextension.py index 5b72b5d1d..6f7e18247 100644 --- a/src/underworld3/utilities/_jitextension.py +++ b/src/underworld3/utilities/_jitextension.py @@ -912,12 +912,13 @@ def _no_derivative(self, printer): f"{self.__class__.__name__}: derivative of an integration-point " "variable has no meaning (the field is defined only at the " "quadrature points), so the gradient here would be a silent " - "zero. A gradient IS available from a projection of the same " - "data: for a swarm variable use proxy_location='cells', whose " - "level sets are a least-squares polynomial per cell and can be " - "differentiated (measured: degree 2 recovers the gradient of a " - "quadratic to 2e-7, against 1e-4 for a global L2 projection). " - "Otherwise project onto a MeshVariable and differentiate that." + "zero. This is refused in a WEAK FORM only, where the " + "discretisation is yours to choose: build the variable with " + "proxy_location='cells' instead, whose level sets are a " + "least-squares polynomial per cell and differentiate directly " + "(degree 2 recovers the gradient of a quadratic to 2e-7). " + "uw.function.evaluate() of the same derivative does answer: as " + "a query it recovers the gradient from a per-cell fit for you." ) for var in varlist: diff --git a/tests/test_0071_index_swarm_proxy_location.py b/tests/test_0071_index_swarm_proxy_location.py index 02c963971..a5d49817f 100644 --- a/tests/test_0071_index_swarm_proxy_location.py +++ b/tests/test_0071_index_swarm_proxy_location.py @@ -239,7 +239,11 @@ def test_the_gradient_is_available_from_the_cell_fit(): local and exact for polynomials up to its degree.""" mesh = uw.meshing.UnstructuredSimplexBox(cellSize=0.1, qdegree=2) x, y = mesh.X - pts = np.array([[0.31, 0.42], [0.62, 0.25], [0.5, 0.5]]) + all_pts = np.array([[0.31, 0.42], [0.62, 0.25], [0.5, 0.5]]) + # uw.function.evaluate is rank-local: only ask for points this rank owns. + pts = all_pts[np.asarray(mesh._robust_owning_cells(all_pts)) >= 0] + if pts.shape[0] == 0: + pytest.skip("no sample point on this rank") exact = 2 * pts[:, 0] # d/dx of x^2 + 2y def gradient_error(tag, location, degree): @@ -258,9 +262,17 @@ def gradient_error(tag, location, degree): assert cells2 < 1e-5, cells2 # exact for a quadratic assert cells2 < nodes2 / 10, (cells2, nodes2) - # the integration-point form refuses, and says where the gradient lives + # The integration-point form: refused in a WEAK FORM, recovered by + # evaluate (which fits the values per cell for the one call). swarm = uw.swarm.Swarm(mesh) ip = uw.swarm.SwarmVariable("Gq", swarm, 1, proxy_location="integration_points") swarm.populate(fill_param=3) + Xp = np.asarray(swarm._particle_coordinates.data) + with uw.synchronised_array_update(): + ip.data[:, 0] = Xp[:, 0] ** 2 + 2 * Xp[:, 1] with pytest.raises(RuntimeError, match="proxy_location='cells'"): - uw.function.evaluate(ip.sym[0].diff(x), pts) + uw.maths.Integral(mesh, ip.sym[0].diff(x)).evaluate() # the weak form + recovered = np.asarray(uw.function.evaluate(ip.sym[0].diff(x), pts)).reshape(-1) + assert np.abs(recovered - exact).max() < 5e-3, recovered # the query answers + # and the direct route is the sharper of the two + assert cells2 < np.abs(recovered - exact).max() From d53d0038db8c4a7f371cfae14f79c80c17ff539d Mon Sep 17 00:00:00 2001 From: lmoresi Date: Wed, 9 Sep 2026 21:26:06 -0700 Subject: [PATCH 06/10] Two constants of the same name were one symbol in the generated C A layered viscosity built from two ViscousFlowModels returned the UNIFORM-viscosity answer: L2 2.819e-1 against the exact layered Couette profile, and 1.502e-10 against plain linear shear. The composed flux was correct and so was the constants manifest ((0, \eta = 1.0), (1, \eta = 1000.0)); only the emitted C was wrong. _JITConstant is a plain sympy.Symbol subclass that never adopted the disambiguation UWexpression uses (docs/developer/design/ SYMBOL_DISAMBIGUATION_2025-12.md), and it has neither half of it. It constructed through Symbol.__new__, which is cached by NAME, so the second placeholder was literally the first object and assigning its _ccodestr overwrote the first one's: a, b = _JITConstant(0, name='same'), _JITConstant(1, name='same') a is b -> True a._ccodestr, b._ccodestr -> constants[1], constants[1] Every occurrence then rendered as one constants[] slot, so the blend collapsed to (phi_0 + phi_1) * constants[k]. Every ViscousFlowModel calls its viscosity \eta, so any model with two of them was affected, not just multi-material. Construct via Symbol.__xnew__ to bypass the cache and put the slot index in _hashable_content, so identity is the slot rather than the name. The same solve now gives 1.807e-7 against the layered exact solution. Also: the manifest sort tie-broke on str(expr), which for a UWexpression is its current VALUE, so two same-named constants could swap slots when a parameter changed. Tie-break on instance_number instead. Regression tests at both levels in test_0103_jit_rampable_constants.py. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01MSGAFeA7qYXgkuw9ud8F2G --- src/underworld3/constitutive_models.py | 9 +++ src/underworld3/utilities/_jitextension.py | 44 +++++++++++- tests/test_0103_jit_rampable_constants.py | 78 ++++++++++++++++++++++ 3 files changed, 129 insertions(+), 2 deletions(-) diff --git a/src/underworld3/constitutive_models.py b/src/underworld3/constitutive_models.py index 1c807d4a7..8c8e38cdc 100644 --- a/src/underworld3/constitutive_models.py +++ b/src/underworld3/constitutive_models.py @@ -4518,6 +4518,15 @@ def __init__( Set to True if IndexSwarmVariable does not maintain partition of unity. Default: False (assumes IndexSwarmVariable maintains partition of unity) """ + # NB (2026-09-09): this class used to return the UNIFORM-viscosity + # answer (layered Couette L2 2.8e-1; identical to plain linear shear to + # 1.5e-10) while its composed flux and the constants manifest both + # looked correct. The cause was in the JIT, not here: every constituent + # names its viscosity \eta, and the constants[] placeholder was named + # for the expression alone, so sympy treated two slots as one symbol + # and the blend collapsed to a single viscosity. Fixed in + # utilities/_jitextension.py::_extract_constants; regression in + # tests/test_0103_jit_rampable_constants.py. # Validate compatibility before initialization self._validate_model_compatibility(constitutive_models) diff --git a/src/underworld3/utilities/_jitextension.py b/src/underworld3/utilities/_jitextension.py index 6f7e18247..ccc05a669 100644 --- a/src/underworld3/utilities/_jitextension.py +++ b/src/underworld3/utilities/_jitextension.py @@ -334,16 +334,44 @@ class _JITConstant(sympy.Symbol): Used by the JIT compiler to route constant UWexpressions through PETSc's PetscDSSetConstants() mechanism instead of baking values as C literals. + + Identity is the ``constants[]`` INDEX, not the name. Two constants may + legitimately share a display name — every ``ViscousFlowModel`` calls its + viscosity :math:`\eta`, so a two-material model has two of them — and each + needs its own slot. This follows the same mechanism ``UWexpression`` uses + to keep same-named symbols on different meshes apart (see + ``docs/developer/design/SYMBOL_DISAMBIGUATION_2025-12.md``): construct via + ``Symbol.__xnew__`` to bypass SymPy's name-keyed instance cache, and add + the discriminator to ``_hashable_content``. + + Without both halves, ``sympy.Symbol.__new__`` returns the *cached instance + for that name*: the second placeholder was literally the first object, and + assigning its ``_ccodestr`` overwrote the first one's. Every occurrence + then rendered as one ``constants[]`` slot, so a layered viscosity + assembled as ``(phi_0 + phi_1) * constants[k]`` — a single uniform + viscosity — while the manifest and the symbolic expression both looked + correct. """ + __slots__ = ("_const_index", "_ccodestr") + def __new__(cls, index, name=None): if name is None: name = f"_jit_const_{index}" - obj = super().__new__(cls, name) + # __xnew__, not __new__: the latter is cached by (name, assumptions), + # which knows nothing about _const_index. + obj = sympy.Symbol.__xnew__(cls, name) obj._const_index = index obj._ccodestr = f"constants[{index}]" return obj + def _hashable_content(self): + """Two placeholders differ if their constants[] slot differs.""" + return sympy.Symbol._hashable_content(self) + (self._const_index,) + + def __getnewargs_ex__(self): + return ((self._const_index, self.name), {}) + def _ccode(self, printer): return self._ccodestr @@ -394,13 +422,25 @@ def _extract_constants(all_fns, mesh): # Sort by the user-given symbol name, not ``str(expr)`` — ``__str__`` on a # UWexpression returns the current *value*, which shuffles the index # assignment whenever a value changes. ``.name`` is stable. - sorted_constants = sorted(constant_exprs, key=lambda e: (e.name, _stable_sort_key(e))) + # + # Two constants can legitimately SHARE a name: every ViscousFlowModel calls + # its viscosity \eta, so a model with two of them has two \eta constants. + # ``instance_number`` (creation order, identical on every rank running the + # same script) breaks that tie without reintroducing the value into the key. + sorted_constants = sorted( + constant_exprs, + key=lambda e: (e.name, getattr(e, "instance_number", -1), _stable_sort_key(e)), + ) manifest = [] subs_map = {} for i, expr in enumerate(sorted_constants): # Use ``expr.name`` (stable) instead of ``str(expr)`` (= current value) # so the placeholder symbol's identity is independent of parameter value. + # + # Same-named constants stay apart through _JITConstant's own + # disambiguation (its _hashable_content carries the slot index), not + # through a unique name — see the class docstring. jit_const = _JITConstant(i, name=f"_jit_const_{expr.name}") manifest.append((i, expr)) subs_map[expr] = jit_const diff --git a/tests/test_0103_jit_rampable_constants.py b/tests/test_0103_jit_rampable_constants.py index 180df0683..a4cdf93c7 100644 --- a/tests/test_0103_jit_rampable_constants.py +++ b/tests/test_0103_jit_rampable_constants.py @@ -89,3 +89,81 @@ def test_ramped_solution_matches_rebuilt_solution(): assert np.isclose(ramped, rebuilt, rtol=1e-10), ( f"ramped {ramped} != rebuilt {rebuilt}") + + +def test_two_constants_with_the_same_name_do_not_collapse(): + """Two constants may legitimately share a symbol name — every + ViscousFlowModel calls its viscosity \\eta — and they must reach the + compiled kernel as two different ``constants[]`` slots. + + The JIT placeholder is a plain ``sympy.Symbol`` subclass, so a placeholder + named for the expression alone made the two the SAME symbol whatever their + index. A two-material Stokes solve then assembled + ``(phi_0 + phi_1) * constants[k]`` — one uniform viscosity — and returned + exactly the linear-shear answer while the manifest and the symbolic + expression both looked correct. + + NB the two constants have to be built the way a solver builds them (through + ``Parameters``, which tags each one). Two BARE expressions of the same name + are the same symbol to sympy by design — ``2*a + 3*b`` is ``5*\\eta`` — so + they never reach the JIT as two things in the first place. + """ + import sympy + from underworld3.utilities._jitextension import _extract_constants + + mesh = uw.meshing.UnstructuredSimplexBox(cellSize=0.5, qdegree=2) + v = uw.discretisation.MeshVariable("vjc", mesh, mesh.dim, degree=2) + p = uw.discretisation.MeshVariable("pjc", mesh, 1, degree=1) + stokes = uw.systems.Stokes(mesh, velocityField=v, pressureField=p) + + lower = uw.constitutive_models.ViscousFlowModel(stokes.Unknowns, material_name="lo") + lower.Parameters.shear_viscosity_0 = 1.0 + upper = uw.constitutive_models.ViscousFlowModel(stokes.Unknowns, material_name="up") + upper.Parameters.shear_viscosity_0 = 1000.0 + a = lower.Parameters.shear_viscosity_0 + b = upper.Parameters.shear_viscosity_0 + assert a != b, "the Parameters route no longer distinguishes same-named constants" + + phi0, phi1, xs = sympy.symbols("phi0 phi1 xs") + manifest, subs_map = _extract_constants((a * phi0 * xs + b * phi1 * xs,), mesh) + + assert len(manifest) == 2, manifest + placeholders = {subs_map[a], subs_map[b]} + assert len(placeholders) == 2, "the two placeholders are the same symbol" + + lowered = sympy.expand((a * phi0 * xs + b * phi1 * xs).xreplace(subs_map)) + assert len(lowered.free_symbols & placeholders) == 2, lowered + + +def test_two_materials_solve_the_layered_problem_not_the_uniform_one(): + """The end-to-end form of the same defect: a layered viscosity built from + two ViscousFlowModels must give the layered answer, not linear shear.""" + import sympy + + eta_top, h = 1.0e3, 0.5 + mesh = uw.meshing.UnstructuredSimplexBox(cellSize=0.1, qdegree=2, regular=True) + v = uw.discretisation.MeshVariable("vmc", mesh, mesh.dim, degree=2) + p = uw.discretisation.MeshVariable("pmc", mesh, 1, degree=1) + + materials = uw.swarm.MaterialSwarm(mesh, fill_param=3, name="Mmc") + materials.add("lower", shear_viscosity_0=1.0) + materials.add("upper", shear_viscosity_0=eta_top) + materials["upper"] = mesh.X[1] > h + + stokes = uw.systems.Stokes(mesh, velocityField=v, pressureField=p) + stokes.constitutive_model = uw.constitutive_models.ViscousFlowModel + stokes.materials = materials + stokes.add_dirichlet_bc((1.0, 0.0), "Top") + stokes.add_dirichlet_bc((0.0, 0.0), "Bottom") + stokes.add_dirichlet_bc((sympy.oo, 0.0), "Left") + stokes.add_dirichlet_bc((sympy.oo, 0.0), "Right") + stokes.tolerance = 1e-8 + stokes.solve() + + A = 1.0 / (h + (1.0 - h) / eta_top) + X = np.asarray(v.coords) + layered = np.where(X[:, 1] < h, A * X[:, 1], A * h + A / eta_top * (X[:, 1] - h)) + got = np.asarray(v.data[:, 0]) + + assert np.sqrt(np.mean((got - layered) ** 2)) < 1e-5 + assert np.sqrt(np.mean((got - X[:, 1]) ** 2)) > 1e-2 # NOT linear shear From 9f334459fbc82d5586c6fb331050e3669ab14914 Mon Sep 17 00:00:00 2001 From: lmoresi Date: Wed, 9 Sep 2026 21:26:36 -0700 Subject: [PATCH 07/10] proxy_sampling: where the assembler reads, and what it reads there proxy_location says WHERE a swarm variable's proxy lives; the new proxy_sampling says WHAT each point reads. The two are orthogonal and were previously conflated in one reconstruction. reconstruct a weighted fit over the nnn nearest particles, linear exact - what a smooth field wants (the default) share the mean over the particles this point speaks for: those whose nearest integration point WITHIN THEIR OWN CELL is this one - the cell-restricted Voronoi share The share (utilities/particle_share.py) is the closest a fixed quadrature rule gets to true Voronoi integration: the rule points partition their own cell, every particle lands in exactly one part, and nothing crosses a cell wall. That is what a HISTORY wants - stress, damage, accumulated strain - because the value is bounded by the particle values (it is a mean of them) so it cannot invent a stress the swarm never held, while the reconstruction overshoots a discontinuity and gets WORSE as particles are added: particles/cell reconstruct range share range 3 -0.051 .. +1.137 0.000 .. 1.000 8 -0.068 .. +1.108 0.000 .. 1.000 15 -0.109 .. +1.097 0.000 .. 1.000 There is deliberately no "nearest" for a plain SwarmVariable. Sampling one particle's value whole is the MATERIAL mapping, and a material is an IndexSwarmVariable; putting the property field on the particles and sampling it hands the solver an answer where it needs a constitutive law. Asking for it raises, and the message says so. IndexSwarmVariable now defaults to proxy_location="integration_points" with proxy_sampling="nearest". Nodes measured worst everywhere (layered Couette 8.0e-2 against 1.8e-7) and its smear is about one cell wide however many particles are added - a property of the basis, not of the swarm. update_type only means anything at the nodes and now warns elsewhere; test_0115 asks for nodes explicitly. At a cut-cell interface, nearest sampling converges to a floor set by the rule at ~8 particles per cell (3.48e-2 -> 1.85e-2 -> 1.85e-2 at fill 3/8/15); past that, refine the mesh. The share gives fractional masks there, and then the answer depends on the mixing rule: createMask is arithmetic (Voigt) and does NOT converge (3.53e-2 flat), while the same masks blended harmonically (Reuss) do (1.83e-2 -> 1.24e-2). Locating particles is the expensive half of any cell-local operation (18.8 ms for 32,912 particles against 3.2 ms for the share itself), so Swarm._owning_cells() caches it, drops it wherever _kdtree is dropped, and repopulate's census now reads the same cache. Lagrangian_Swarm forwards proxy_sampling, so a viscoelastic stress history can ride on the share. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01MSGAFeA7qYXgkuw9ud8F2G --- docs/advanced/figures/material_share.png | Bin 0 -> 95953 bytes .../subsystems/integration-point-variables.md | 49 ++- src/underworld3/swarm.py | 342 ++++++++++++++++-- src/underworld3/systems/ddt.py | 16 + src/underworld3/utilities/particle_share.py | 118 ++++++ tests/test_0071_index_swarm_proxy_location.py | 119 ++++++ tests/test_0115_index_swarm_vectorized.py | 1 + 7 files changed, 613 insertions(+), 32 deletions(-) create mode 100644 docs/advanced/figures/material_share.png create mode 100644 src/underworld3/utilities/particle_share.py diff --git a/docs/advanced/figures/material_share.png b/docs/advanced/figures/material_share.png new file mode 100644 index 0000000000000000000000000000000000000000..0a1b28a40d6a2a88b3afa274c6909f09f779bb11 GIT binary patch literal 95953 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 0 \ else np.zeros((0, dim)) - cells = np.asarray(mesh._robust_owning_cells(X), dtype=np.int64) if X.shape[0] else np.zeros(0, np.int64) + # The census and the Voronoi-share proxy fill want the same answer, and + # locating particles is the expensive half of both, so take the swarm's + # cached assignment (dropped whenever the particles move). + cells = self._owning_cells() + if cells.shape[0] != X.shape[0]: # cache raced the copy above + cells = (np.asarray(mesh._robust_owning_cells(X), dtype=np.int64) + if X.shape[0] else np.zeros(0, np.int64)) npc = np.bincount(cells[cells >= 0], minlength=ncells) lat_cells = np.asarray(mesh._robust_owning_cells(lattice), dtype=np.int64) owned = np.zeros(ncells, dtype=bool) diff --git a/src/underworld3/systems/ddt.py b/src/underworld3/systems/ddt.py index 23146df59..9a8ab01df 100644 --- a/src/underworld3/systems/ddt.py +++ b/src/underworld3/systems/ddt.py @@ -3908,6 +3908,15 @@ class Lagrangian_Swarm(_DDtBase): ``"cells"`` fits a least-squares polynomial of degree ``degree`` per cell, exact for polynomial histories and integrated exactly by the default rule. + proxy_sampling : {"reconstruct", "share"}, optional + How each slot's proxy reads the particles (default ``"reconstruct"``). + ``"share"`` requires ``proxy_location="integration_points"`` and gives + every integration point the mean of the particles it speaks for — the + cell-restricted Voronoi share. For a HISTORY that is usually what is + wanted: every particle's state contributes, the average is bounded by + the particle values so it cannot invent a stress the swarm never held, + and the stencil cannot reach across a cell wall into another material. + See :doc:`../../advanced/particle-population-and-materials`. step_averaging : int, optional Number of steps for history averaging (default ``2``). @@ -3964,6 +3973,7 @@ def __init__( smoothing=0.0, step_averaging=2, proxy_location="nodes", + proxy_sampling="reconstruct", particle_update="pic", residual_retention=1.0, ): @@ -3993,6 +4003,11 @@ def __init__( # (discontinuous, degree `degree`), exact for polynomial histories # and integrated exactly by the default rule. self.proxy_location = proxy_location + # "share": each integration point averages the particles whose nearest + # point within their own cell it is, so every particle's history + # reaches the assembly and the average stays inside the range the + # particles hold. + self.proxy_sampling = proxy_sampling self._init_history_tracking(order) @@ -4026,6 +4041,7 @@ def _initialise_before_first_move(): proxy_degree=degree, proxy_continuous=continuous, proxy_location=proxy_location, + proxy_sampling=proxy_sampling, varsymbol=rf"{varsymbol}^{{ {'*'*(i+1)} }}", ) ) diff --git a/src/underworld3/utilities/particle_share.py b/src/underworld3/utilities/particle_share.py new file mode 100644 index 000000000..f843d1822 --- /dev/null +++ b/src/underworld3/utilities/particle_share.py @@ -0,0 +1,118 @@ +r"""The cell-restricted Voronoi share: which particles an integration point speaks for. + +A particle method has to answer one question before it can assemble anything: +what value does the quadrature rule read at each of its points? Taking the +nearest particle answers it sharply but throws most of the swarm away — at ten +particles per cell and six rule points, better than half of them never reach +the assembly at all. That is fine for a *label*, where sub-sampling costs +nothing but sharpness, and wrong for a *history*, where every particle carries +state that was earned by being advected. + +The share is the middle course, and it is what the classic Voronoi +particle-in-cell integration was reaching for. Each particle is assigned to the +nearest integration point **of its own cell**, so the rule points partition the +cell between them and every particle lands in exactly one part. An integration +point then reads the mean over the sub-region it represents. No particle is +discarded, nothing is smeared across a cell boundary, and the whole thing is a +gather with no tree: the owning cell is already known, and the choice within a +cell is over :math:`N_q` candidates. + +The restriction to the particle's own cell is not a detail. Without it a +particle just across a cell wall is often nearer to a rule point on the far +side, and a material interface leaks into the neighbouring cell — which +defeats the reason for sampling at the integration points at all. + +See Also +-------- +underworld3.utilities.cell_polynomial_projection : the fitted alternative, + which gives a differentiable field per cell rather than a value per point. +""" + +import numpy as np + +__all__ = ["share_assignment", "share_average"] + + +def share_assignment(integration_points, coords, cells, chunk_bytes=64 << 20): + """Assign each particle to the nearest integration point of its own cell. + + Parameters + ---------- + integration_points : ndarray, shape (ncells, Nq, cdim) + The physical rule points, in local cell order — the layout + :attr:`IntegrationPointVariable.integration_points` returns. + coords : ndarray, shape (Np, cdim) + Particle coordinates, non-dimensional (the same frame as + ``integration_points``). + cells : ndarray, shape (Np,) + Local owning cell per particle; a negative entry means "not on this + rank's mesh" and is left unassigned. + chunk_bytes : int + Working-set bound for the distance evaluation. The gather is + ``(chunk, Nq, cdim)``, so this caps memory rather than particle count. + + Returns + ------- + flat : ndarray, shape (Np,), int64 + Index into the flattened ``(ncells * Nq,)`` point ordering, or ``-1`` + for a particle whose cell is negative. + """ + integration_points = np.asarray(integration_points, dtype=float) + coords = np.asarray(coords, dtype=float) + cells = np.asarray(cells).reshape(-1) + + ncells, Nq, cdim = integration_points.shape + flat = np.full(coords.shape[0], -1, dtype=np.int64) + live = np.flatnonzero((cells >= 0) & (cells < ncells)) + if live.size == 0 or ncells == 0: + return flat + + # (chunk, Nq, cdim) doubles per pass + step = max(1, int(chunk_bytes // max(Nq * cdim * 8, 1))) + for start in range(0, live.size, step): + sel = live[start : start + step] + cc = cells[sel] + d2 = ((integration_points[cc] - coords[sel][:, None, :]) ** 2).sum(axis=-1) + flat[sel] = cc * Nq + d2.argmin(axis=1) + + return flat + + +def share_average(flat, values, npoints): + """Mean of each integration point's share, and how many particles it holds. + + Parameters + ---------- + flat : ndarray, shape (Np,) + The assignment from :func:`share_assignment`; ``-1`` entries are + ignored. + values : ndarray, shape (Np, ncomp) + Particle values. + npoints : int + Total number of integration points on this rank (``ncells * Nq``). + + Returns + ------- + means : ndarray, shape (npoints, ncomp) + The share mean; zero where a point holds no particles. + counts : ndarray, shape (npoints,) + Particles per integration point. A zero here is the caller's problem + to fill — a rule point in an empty or badly-sampled cell. + """ + flat = np.asarray(flat).reshape(-1) + values = np.asarray(values, dtype=float).reshape(flat.shape[0], -1) + ncomp = values.shape[1] + + ok = flat >= 0 + idx = flat[ok] + counts = np.bincount(idx, minlength=npoints)[:npoints] + + means = np.zeros((npoints, ncomp), dtype=float) + if idx.size: + vals = values[ok] + for k in range(ncomp): + means[:, k] = np.bincount(idx, weights=vals[:, k], minlength=npoints)[:npoints] + nz = counts > 0 + means[nz] /= counts[nz, None] + + return means, counts diff --git a/tests/test_0071_index_swarm_proxy_location.py b/tests/test_0071_index_swarm_proxy_location.py index a5d49817f..ff22d35c9 100644 --- a/tests/test_0071_index_swarm_proxy_location.py +++ b/tests/test_0071_index_swarm_proxy_location.py @@ -276,3 +276,122 @@ def gradient_error(tag, location, degree): assert np.abs(recovered - exact).max() < 5e-3, recovered # the query answers # and the direct route is the sharper of the two assert cells2 < np.abs(recovered - exact).max() + + +def _layered_solve(tag, viscosity, swarm_setup, eta_top=1.0e3, h=0.5): + """The layered Couette solve, given a viscosity expression.""" + mesh, swarm, viscosity = swarm_setup + v = uw.discretisation.MeshVariable(f"v{tag}", mesh, mesh.dim, degree=2) + p = uw.discretisation.MeshVariable(f"p{tag}", mesh, 1, degree=1) + stokes = uw.systems.Stokes(mesh, velocityField=v, pressureField=p) + stokes.constitutive_model = uw.constitutive_models.ViscousFlowModel + stokes.constitutive_model.Parameters.shear_viscosity_0 = viscosity + stokes.add_dirichlet_bc((1.0, 0.0), "Top") + stokes.add_dirichlet_bc((0.0, 0.0), "Bottom") + stokes.add_dirichlet_bc((sympy.oo, 0.0), "Left") + stokes.add_dirichlet_bc((sympy.oo, 0.0), "Right") + stokes.tolerance = 1e-8 + stokes.solve() + A = 1.0 / (h + (1.0 - h) / eta_top) + Xv = np.asarray(v.coords) + exact = np.where(Xv[:, 1] < h, A * Xv[:, 1], A * h + A / eta_top * (Xv[:, 1] - h)) + return np.sqrt(np.mean((np.asarray(v.data[:, 0]) - exact) ** 2)) + + +def test_a_property_on_particles_is_not_a_material(): + """The hand-rolled material: carry the viscosity itself on the particles + and sample it. It is refused, and the refusal names the thing to use + instead — because the only reconstruction on offer overshoots a jump into + a NEGATIVE viscosity, and because a solver needs the constitutive law, not + a sampled answer to it.""" + eta_top, h = 1.0e3, 0.5 + mesh = uw.meshing.UnstructuredSimplexBox(cellSize=0.1, qdegree=2, regular=True) + swarm = uw.swarm.Swarm(mesh) + + with pytest.raises(ValueError, match="IndexSwarmVariable"): + uw.swarm.SwarmVariable("etaN", swarm, 1, + proxy_location="integration_points", + proxy_sampling="nearest") + + # why: the reconstruction that IS on offer cannot hold a jump + eta = uw.swarm.SwarmVariable("etaR", swarm, 1, proxy_location="integration_points") + swarm.populate(fill_param=3) + X = np.asarray(swarm._particle_coordinates.data) + with uw.synchronised_array_update(): + eta.data[:, 0] = np.where(X[:, 1] > h, eta_top, 1.0) + eta._update_proxy_if_stale() + assert np.asarray(eta._meshVar.data[:, 0]).min() < 0.0 # a negative viscosity + + # the supported route is exact on the same problem + mesh, swarm, mat = _layered("Mok", "integration_points", h=h) + err = _layered_solve("ok", None, (mesh, swarm, mat.createMask([1.0, eta_top])), + eta_top, h) + assert err < 1e-5, err + + +def test_the_share_uses_every_particle_and_is_linear_exact(): + """proxy_sampling="share" assigns every particle to one integration point + of its OWN cell, and each point reads the mean of its share. Nothing is + discarded (unlike a nearest-particle read) and nothing crosses a cell + boundary.""" + from underworld3.utilities.particle_share import share_assignment + + mesh = uw.meshing.UnstructuredSimplexBox(cellSize=0.2, qdegree=2, regular=True) + swarm = uw.swarm.Swarm(mesh) + f = uw.swarm.SwarmVariable("fsh", swarm, 1, proxy_location="integration_points", + proxy_sampling="share") + swarm.populate(fill_param=4) + X = np.asarray(swarm._particle_coordinates.data) + with uw.synchronised_array_update(): + f.data[:, 0] = 2.0 * X[:, 0] - 3.0 * X[:, 1] + 1.0 + f._update_proxy_if_stale() + + ipc = np.asarray(f._meshVar.integration_points) + flat = share_assignment(ipc, X, swarm._owning_cells()) + assert (flat >= 0).sum() == X.shape[0] # every particle used + cells = swarm._owning_cells() + assert np.array_equal(flat // ipc.shape[1], cells) # and only in its own cell + + # the share mean of a linear field is close to its value at the point + pts = ipc.reshape(-1, mesh.dim) + exact = 2.0 * pts[:, 0] - 3.0 * pts[:, 1] + 1.0 + got = np.asarray(f._meshVar.data[:, 0]) + assert np.sqrt(np.mean((got - exact) ** 2)) < 0.1 * mesh.get_min_radius() + + +def test_share_level_sets_are_fractional_but_still_a_partition(): + """The index share gives material FRACTIONS where a cell is crossed, which + nearest sampling never does — and the masks still sum to one, so + createMask stays a weighted mean.""" + mesh = uw.meshing.UnstructuredSimplexBox(cellSize=0.15, qdegree=2, regular=False) + fractional = {} + for tag, sampling in (("Snear", "nearest"), ("Sshar", "share")): + swarm = uw.swarm.Swarm(mesh) + mat = uw.swarm.IndexSwarmVariable(tag, swarm, indices=2, + proxy_location="integration_points", + proxy_sampling=sampling) + swarm.populate(fill_param=4) + X = np.asarray(swarm._particle_coordinates.data) + with uw.synchronised_array_update(): + mat.data[:, 0] = (X[:, 1] > 0.53).astype(int) # cuts through cells + U = np.column_stack([np.asarray(v.data[:, 0]) for v in mat._meshLevelSetVars]) + assert np.allclose(U.sum(axis=1), 1.0, atol=1e-12), U.sum(axis=1) + assert U.min() >= -1e-12 and U.max() <= 1 + 1e-12 + fractional[sampling] = int(((U > 1e-9) & (U < 1 - 1e-9)).any(axis=1).sum()) + + assert fractional["nearest"] == 0, fractional + assert fractional["share"] > 0, fractional + + +def test_an_unavailable_sampling_combination_raises(): + mesh = uw.meshing.UnstructuredSimplexBox(cellSize=0.25, qdegree=2, regular=True) + swarm = uw.swarm.Swarm(mesh) + with pytest.raises(ValueError, match="integration_points"): + uw.swarm.SwarmVariable("bad1", swarm, 1, proxy_location="nodes", + proxy_sampling="share") + with pytest.raises(ValueError, match="integration_points"): + uw.swarm.SwarmVariable("bad2", swarm, 1, proxy_location="cells", + proxy_sampling="share") + with pytest.raises(ValueError, match="integration_points"): + uw.swarm.IndexSwarmVariable("bad3", swarm, indices=2, + proxy_location="nodes", proxy_sampling="share") diff --git a/tests/test_0115_index_swarm_vectorized.py b/tests/test_0115_index_swarm_vectorized.py index bf88c29a3..198dee4f5 100644 --- a/tests/test_0115_index_swarm_vectorized.py +++ b/tests/test_0115_index_swarm_vectorized.py @@ -118,6 +118,7 @@ def _build_mesh_and_swarm(fill_param=5, nnn=5, radius=0.5, update_type=0, swarm = uw.swarm.Swarm(mesh) material = uw.swarm.IndexSwarmVariable( "M_test", swarm, indices=2, proxy_degree=1, proxy_continuous=True, + proxy_location="nodes", # update_type only means anything here update_type=update_type, npoints=nnn, radius=radius, npoints_bc=nnn_bc if nnn_bc is not None else 2, ind_bc=ind_bc, From 72fdb8461778a2b7cbc7bccd96f005a12bcddccb Mon Sep 17 00:00:00 2001 From: lmoresi Date: Wed, 9 Sep 2026 21:26:59 -0700 Subject: [PATCH 08/10] Materials: name them, say where they are, and stop A model script should not write a level set, a mask, or a blend. It should name its materials and their properties, say where each one is, and hand the whole thing to the solver: materials = uw.swarm.MaterialSwarm(mesh, fill_param=3) materials.add("mantle", shear_viscosity_0=1.0, density=3300) materials.add("slab", shear_viscosity_0=1.0e3, density=3400) materials["slab"] = mesh.X[1] > 0.53 stokes.constitutive_model = uw.constitutive_models.ViscousFlowModel stokes.materials = materials stokes.bodyforce = -materials.density * mesh.CoordinateSystem.unit_e_1 solver.materials sets every constitutive-model parameter the materials declare AND the model recognises, by name. One the model does not own (density) is not pushed anywhere; it is a blended symbol for the script to use where it belongs. Properties can change and regions be repainted afterwards - the blend is symbolic and the push repeats. WHAT a material is and WHERE it is are kept apart, which is what the materials register was always reaching for. MaterialRegistry holds the definitions: mesh-free, shareable between models, exportable as plain data, and its property values may be numbers, quantities, or LAWS (eta_0 * sympy.exp(-T.sym[0])). Two distributions consume one registry: MaterialSwarm carried by particles, so the material advects MaterialRegions tied to the mesh - a gmsh physical group, a mesh label, or a geometric condition resolved at the integration points. Exact, no particles, no population control, built once. Both build the same partition of unity. It earns its place precisely when a property is a law: there is then no number to store at an integration point, and the only way to combine N expressions into one symbol the assembler can compile is the weighted sum. MaterialRegistry keeps create_material / set_property / get_property / export_config / import_config / add_callback and the create_standard_* helpers, with values now symbolic and property names the ones a constitutive model knows (MaterialProperty.VISCOSITY is "viscosity", already the alias for shear_viscosity_0). Removed: assign_to_region and evaluate_property_field, which returned numpy from region IDs and could never reach a weak form - MaterialRegions is that idea, finished. A declared property that no model recognises and nothing reads is reported at solve time only when it is a CLOSE MATCH to a parameter the model does have: "viscocity" is flagged against "viscosity", "density" is silent. A misspelled viscosity is otherwise silently the default one. IndexSwarmVariable stays as the machinery and stays importable; it is no longer the documented way to do materials. Layered Couette through the new interface: L2 1.807e-7, assembled int(eta) 500.5000 exactly - the same as the raw route. Verified on a VEP model too, with shear_viscosity_0 and shear_modulus both pushed and the stress history on the share. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01MSGAFeA7qYXgkuw9ud8F2G --- docs/advanced/index.md | 6 +- .../particle-population-and-materials.md | 416 +++++-- docs/api/materials.md | 53 +- .../intermediate/Ex_Swarm_Material_Index.py | 97 +- src/underworld3/__init__.py | 7 +- .../cython/petsc_generic_snes_solvers.pyx | 49 + src/underworld3/materials.py | 1074 ++++++++++++----- src/underworld3/swarm.py | 6 + src/underworld3/swarm_materials.py | 241 ++++ tests/test_0072_material_swarm.py | 243 ++++ tests/test_0073_material_regions.py | 176 +++ 11 files changed, 1936 insertions(+), 432 deletions(-) create mode 100644 src/underworld3/swarm_materials.py create mode 100644 tests/test_0072_material_swarm.py create mode 100644 tests/test_0073_material_regions.py diff --git a/docs/advanced/index.md b/docs/advanced/index.md index 78ac01560..51e5c081e 100644 --- a/docs/advanced/index.md +++ b/docs/advanced/index.md @@ -76,9 +76,9 @@ Dynamic remeshing and adaptive refinement strategies. **[→ Mesh Adaptation](mesh-adaptation.md)** ### Particles: Population Control and Materials -Keep every cell sampled as the flow deforms the swarm, and read a material -index at the integration points so an interface stays where the particles -put it. +Keep every cell sampled as the flow deforms the swarm, and declare materials +on a `MaterialSwarm` so an interface stays where the particles put it — read +at the integration points, with no level sets in the model script. **[→ Particle Population and Materials](particle-population-and-materials.md)** diff --git a/docs/advanced/particle-population-and-materials.md b/docs/advanced/particle-population-and-materials.md index 648a6cb78..50dde8c28 100644 --- a/docs/advanced/particle-population-and-materials.md +++ b/docs/advanced/particle-population-and-materials.md @@ -80,54 +80,334 @@ not fighting the outflow, which is physical and correct; it is refilling the inflow side, where the flow brings nothing. ``` -## A material index at the integration points +## Materials -A particle field is a first-class citizen of the symbolic algebra: it carries -a symbol, and that symbol goes wherever a mesh variable's symbol goes. -`IndexSwarmVariable` carries a material label per particle and presents the -mesh with one level set per material, so that `createMask` builds a -material-weighted property that you then use like any other expression: +Name the materials, say where they are, and stop. ```python -material = uw.swarm.IndexSwarmVariable("M", swarm, indices=2, proxy_degree=1) -viscosity = material.createMask([1.0, 1000.0]) +materials = uw.swarm.MaterialSwarm(mesh, fill_param=3) -stokes.constitutive_model.Parameters.shear_viscosity_0 = viscosity -stokes.bodyforce = sympy.Matrix([[0, -material.sym[1] * (1 + T.sym[0])]]) -heat = uw.maths.Integral(mesh, material.sym[1] * T.sym[0]).evaluate() +materials.add("mantle", shear_viscosity_0=1.0, density=3300) +materials.add("slab", shear_viscosity_0=1.0e3, density=3400) + +materials["slab"] = mesh.X[1] > 0.53 + +stokes.constitutive_model = uw.constitutive_models.ViscousFlowModel +stokes.materials = materials +stokes.bodyforce = -materials.density * mesh.CoordinateSystem.unit_e_1 +``` + +That is the whole interface. `stokes.materials = materials` sets every +constitutive-model parameter the materials declare *and* the model recognises, +by name — here `shear_viscosity_0`. A property the model does not own, +`density`, is not pushed anywhere; it is available as a blended symbol for the +model script to use where it belongs. Properties can be changed and regions +repainted afterwards: the blend is symbolic and the push repeats. + +A `MaterialSwarm` **is** a `Swarm`, so everything on the previous page still +applies to it: + +```python +materials.population_control = dict(min_per_cell=8) +materials.advection(v.sym, dt) + +strain = uw.swarm.SwarmVariable("eps", materials, 1, # per-particle state + proxy_location="integration_points", + proxy_sampling="share") +``` + +Regions can be a symbolic condition on the mesh coordinates (and `&`, `|`, `~` +combinations of them), a boolean array over the particles, or a callable of the +coordinate array. Painting is ordered and cumulative — a later region +overwrites an earlier one where they overlap. `materials.add(..., where=...)` +is the same thing said in one line. + +### What a material is, and where it is + +Those are two questions, and Underworld3 keeps them apart. + +**What** is a `uw.MaterialRegistry` entry: a name and a table of properties, +with optional description and reference. A registry knows nothing about +geometry, so it can be written before there is a mesh, shared between models, +and exported and read back as plain data. + +```python +rocks = uw.MaterialRegistry() +rocks.add("mantle", shear_viscosity_0=1.0, density=3300, + description="upper mantle", reference="Turcotte & Schubert (2014)") +rocks.add("slab", shear_viscosity_0=1.0e3, density=3400) +``` + +**Where** is a *distribution*, and there are two. `MaterialSwarm` carries the +materials on particles, so they advect with the flow. `MaterialRegions` ties +them to the mesh: + +```python +materials = uw.MaterialRegions(mesh, registry=rocks) +materials["slab"] = "Slab" # a gmsh physical group +materials["slab"] = mesh.X[1] > 0.53 # or a geometric condition + +stokes.materials = materials +``` + +Both take the same registry, declare materials the same way, and hand the same +thing to the solver. `materials.add(...)` on either is shorthand that writes +into its registry, so a two-material script never has to mention one. + +| | `MaterialSwarm` | `MaterialRegions` | +|---|---|---| +| the material moves | yes | no | +| level sets are | sampled from the particles | exact, 0 or 1 | +| needs population control | yes | no | +| interface position | sub-cell, to the particle density | sub-cell, to the rule | +| cost per step | a proxy fill | nothing; built once | + +Use regions when the geometry is fixed — a layered model, an inclusion, a +basin. It is exact and free. Use the swarm when the material is carried by +the flow, or when it has to carry per-particle history as well. + +### A property can be a law, not just a number + +This is the whole reason for the machinery underneath: + +```python +materials.add("crust", shear_viscosity_0=eta_0 * sympy.exp(-T.sym[0])) ``` -That works through a proxy: the particle values are reconstructed onto a mesh -object the assembler can read, and the symbol you write is the proxy's. Where -that proxy lives is now a choice, and it changes only where the reconstruction -lands: +There is no number to store at an integration point for that material, so it +cannot be handled by sampling a viscosity field. It is carried symbolically and +combined with the other materials' laws by the level sets described below. + +### There is no route that puts the property on the particles + +Carrying the viscosity itself on the particles and sampling it looks simpler +and is the wrong shape. PETSc calls the compiled pointwise functions with +values tabulated at the rule points, so a solver handed a sampled *answer* +cannot reach the parts of the constitutive law it needs — the tangent, the +yield surface, the history update. Keeping the law symbolic and letting the +materials weight it is what makes a material model composable. (The mechanical +symptom is easy to see too: the linear-exact reconstruction a smooth field +wants overshoots a factor-1000 viscosity jump to −219, and a negative viscosity +is not a viscosity. Asking for nearest-particle sampling on a plain +`SwarmVariable` raises, and the error says so.) + +### What is underneath + +A `MaterialSwarm` carries one integer label per particle and presents the mesh +with one *level set* per material — a partition of unity — so that a property +is `Σ φᵢ · valueᵢ`. Where the masks are 0 or 1 that sum is a select, and if +every property were a number a single stored coefficient field would do the +same job; the sum earns its place the moment a property is a law, because there +is then no other way to combine N expressions into one symbol the assembler can +compile. + +That machinery is `uw.swarm.IndexSwarmVariable` and its `createMask`. Models +written before `MaterialSwarm` use it directly and still work; new models +should not need to see it. The two things worth knowing about it are the two +arguments `MaterialSwarm` passes through, below. + +#### `proxy_location` — where the level sets live + +Where the level sets are stored is what the assembler actually reads: + +```python +materials = uw.swarm.MaterialSwarm(mesh, proxy_location="cells") +``` | `proxy_location` | the level sets are | at an interface | |---|---|---| -| `"nodes"` (default) | a continuous field per material | a node on the interface averages both materials, so the cells either side see a viscosity that is neither | -| `"integration_points"` | the material of the nearest particle at every integration point | exactly 0 or 1, and the interface keeps its sub-cell position | +| `"integration_points"` **(default)** | a value at each point of the quadrature rule | exactly 0 or 1, and the interface keeps its sub-cell position | | `"cells"` | a polynomial material fraction per cell | a sharp step at cell edges, with a gradient inside the cell | +| `"nodes"` | a continuous field per material | a node on the interface averages both, so the cells either side see a viscosity that is neither | + +The default is the integration points: it is the classic particle-in-cell +material mapping of Ellipsis and Underworld, and it is measurably the best of +the three. The nodal option is kept for continuity with existing models, but +its smear is about one cell wide *however many particles you add* — that is a +property of the basis, not of the swarm — and the current distance-weighted +fill actually *widens* the band as the swarm is refined. + +#### `proxy_sampling` — what each point reads + +How the particles in a cell become the value at each of its integration +points. Applies only to `proxy_location="integration_points"`. + +| `proxy_sampling` | each point takes | masks | +|---|---|---| +| `"nearest"` **(default)** | the material of its nearest particle | exactly 0 or 1 | +| `"share"` | the material fractions of the particles it speaks for — those whose nearest integration point *within their own cell* is this one | fractional where a cell is crossed | + +`"nearest"` is sharp and assumption-free: nothing is mixed, so no mixing rule +is implied. It sub-samples, though — at ten particles per cell and six rule +points, most particles never reach the assembly. + +`"share"` is the cell-restricted Voronoi share, and it is the closest thing to +the true Voronoi integration that a fixed quadrature rule allows: the rule +points partition their own cell between them, every particle lands in exactly +one part, and nothing crosses a cell boundary. For an *identity* that buys +fractional masks in the crossed cells, and then the answer depends on how you +blend — see the trap below. + +#### What the choice is worth + +Interface at $y = 0.53$ on an irregular mesh, so no scheme can be exact (the +P2 velocity cannot hold a kink inside a cell), viscosity contrast 1000, +against the exact layered Couette profile: -The integration-point option is the classic particle-in-cell material mapping -of Ellipsis and Underworld: the assembler reads each material property at the -point where it evaluates the weak form, from the particle nearest that point. -Nothing is averaged, so nothing can overshoot into a negative viscosity, and -the masks sum to one by construction. +| particles per cell | `"nearest"` | `"share"` + `createMask` | `"share"`, blended harmonically | +|---|---|---|---| +| 3 (2 420) | 3.48e-2 | 3.53e-2 | 1.83e-2 | +| 8 (10 890) | **1.85e-2** | 3.53e-2 | 1.27e-2 | +| 15 (32 912) | 1.85e-2 | 3.61e-2 | **1.24e-2** | + +```{figure} figures/material_share.png +:alt: Identity error against particle density, and the history overshoot + +Left: only `"nearest"` and the harmonically-blended share improve as particles +are added; the arithmetic (Voigt) blend of fractional masks is flat. Right: the +share is bounded by the particle values because it is an average of them, while +the reconstruction's overshoot grows with the swarm. +``` + +Three things to read off it. + +**`"nearest"` converges to a floor and then stops.** By about eight particles +per cell the error stops moving: what limits it is the quadrature rule and the +velocity space, not the swarm. Past that point, refine the mesh — more +particles buy nothing. + +**Fractional masks need a mixing rule you have chosen.** `createMask` blends +*arithmetically*, which for a flux at a common strain rate is a Voigt average, +and on a sharp contrast a Voigt average does not converge with particle +density at all — the middle column is flat. The same masks blended +harmonically (Reuss, `1.0 / material.createMask([1/η₀, 1/η₁])`) converge, and +past the `"nearest"` floor. So fractions are worth having when the material +genuinely *is* a sub-cell mixture and you have picked the rule on physical +grounds; for an interface, `"nearest"` says the true thing (nothing is mixed) +without you having to. + +**Cost is not the discriminator.** Filling the level sets took 1.0 / 1.7 / +3.7 ms for `"nearest"` and 0.7 / 1.3 / 3.9 ms for `"share"` at the three +densities. + +With the interface on mesh edges instead, the exact velocity lies in the P2 +space and the only error left is the material representation: + +| `proxy_location` | assembled $\int \eta$ (exact 500.5) | velocity $L_2$ error | +|---|---|---| +| `"nodes"` | 500.5000 | 8.0e-2 | +| `"integration_points"` | 500.5000 | **1.8e-7** | +| `"cells"` | 500.5000 | **1.8e-7** | + +All three integrate the viscosity correctly *in the mean*, which is exactly +why a bulk diagnostic cannot see the difference. Only the placement differs, +and the placement is what the solve feels. + +```{figure} figures/material_index.png +:alt: The material mask across the interface and the resulting velocity error + +Left: the upper-material mask along a line crossing the interface, as the weak +form sees it. The nodal level set ramps linearly across a whole cell; the other +two are a step in the right place and lie on top of each other. Right: the +resulting error in the velocity against the exact layered flow. +``` + +`docs/examples/utilities/intermediate/Ex_Swarm_Material_Index.py` runs it. + +### Mixing, when the masks are fractional + +`materials.mixing(shear_viscosity_0="harmonic")` chooses how a property is +blended. With the default sampling exactly one mask is 1 at every integration +point, so every rule gives the same answer and there is nothing to choose. With +`proxy_sampling="share"` there is, and the table above is the reason to choose +it on physical grounds rather than by trying both. + +## Material state and history + +Identity is not the only thing particles carry. A viscoelastic stress, an +accumulated strain, a damage variable — these are *state*, earned by being +advected, and every particle's is different. They ride on ordinary +`SwarmVariable`s, and they get the same choice of where the assembler reads +them and how: ```python -material = uw.swarm.IndexSwarmVariable( - "M", swarm, indices=2, proxy_location="integration_points") +stress = uw.swarm.SwarmVariable( + "tau", materials, (2, 2), # the MaterialSwarm is the swarm + proxy_location="integration_points", + proxy_sampling="share") # every particle's history contributes ``` -Everything the symbol could do before, it still does. The one exception is a -derivative of the integration-point form: the element that holds a value at -each integration point has no gradient to give, so the compiler refuses one -rather than returning the silent zero its tabulation would produce. +`Lagrangian_Swarm` takes the same argument, so a viscoelastic stress history +carried on the particles is read the same way: -The gradient is still available, from a projection of the same data, and -`"cells"` is that projection: its level sets are a least-squares polynomial -per cell, so they differentiate directly and with no global solve. Recovering -$\partial_x$ of a quadratic particle field: +```python +DFDt = uw.systems.ddt.Lagrangian_Swarm( + swarm=materials, psi_fn=sympy.Matrix.zeros(2, 2), + vtype=uw.VarType.SYM_TENSOR, degree=1, continuous=False, + order=2, step_averaging=1, + proxy_location="integration_points", proxy_sampling="share") +``` + +Build it before anything reads the materials: it adds swarm variables, and a +swarm cannot gain variables once it holds particles. + +For state, `"share"` is the one to reach for, and for a different reason than +it was rejected for identity: + +- **It uses the whole swarm.** Each point averages the particles it represents + rather than adopting one of them, so a history that varies within a cell is + represented by all of it. This is the "more PIC than not" part: the + quadrature rule is fixed, but what it reads can still be a weighted account + of every particle. +- **It cannot cross a material boundary.** The default `"reconstruct"` gathers + from the nearest particles by distance, and that stencil ignores cell walls; + across a jump it both smears and overshoots. Measured on a discontinuous + particle field read at the integration points (interface at $y = 0.53$, + $h = 0.1$): + + | particles per cell | `"reconstruct"` range | `"share"` range | + |---|---|---| + | 3 | −0.051 … +1.137 | 0.000 … 1.000 | + | 8 | −0.068 … +1.108 | 0.000 … 1.000 | + | 15 | −0.109 … +1.097 | 0.000 … 1.000 | + + The share is bounded by the particle values by construction — it is an + average of them — so it cannot invent a stress the swarm never held. The + reconstruction's overshoot *grows* as particles are added. + +Keep `"reconstruct"` (the default) for a field that really is smooth: it is +exact for linear fields, where the share carries a small averaging error. + +**Cost.** The share needs to know each particle's cell, and locating particles +is the expensive half: 18.8 ms for 32 912 particles against 3.2 ms for the +share itself, on a mesh of 242 cells. That location is cached on the swarm +until the particles move and is reused by every share variable and by +`repopulate`, so a model with several history fields and population control +pays it once per step. For comparison, the `"reconstruct"` path costs 8.1 ms +per step on the same swarm (its cached operator is geometry-only, so it is +rebuilt whenever the particles move). + +## What can be said about a particle field + +A particle field is a first-class citizen of the symbolic algebra: it carries a +symbol, and that symbol goes wherever a mesh variable's symbol goes. The one +exception is a derivative of the integration-point form. + +| | `"nodes"` | `"integration_points"` | `"cells"` | +|---|---|---|---| +| arithmetic with mesh variables and `sympy` | yes | yes | yes | +| `uw.maths.Integral` | yes | yes | yes | +| `uw.function.evaluate` anywhere | yes | yes | yes | +| projection onto a mesh variable | yes | yes | yes | +| viscosity, body force, any solver term | yes | yes | yes | +| a **gradient** of the expression | yes | refused | yes | + +The element that holds a value at each integration point has no gradient to +give, so the compiler refuses one rather than returning the silent zero its +tabulation would produce. The gradient is still available from a projection of +the same data, and `"cells"` is that projection: its level sets are a +least-squares polynomial per cell, so they differentiate directly and with no +global solve. Recovering $\partial_x$ of a quadratic particle field: | where the proxy lives | gradient error | |---|---| @@ -138,8 +418,8 @@ $\partial_x$ of a quadratic particle field: | a global L2 projection onto P2, then differentiate | 1.1e-4 | | `"integration_points"` | refused | -The per-cell fit is the most accurate of them because it is local and exact -for polynomials up to its degree, and no further projection follows it. +The per-cell fit is the most accurate of them because it is local and exact for +polynomials up to its degree, and no further projection follows it. **Two paths, and the difference is deliberate.** A weak form and a query are not the same thing: @@ -161,70 +441,10 @@ So the rule is: sample at the integration points when you want a value placed exactly, fit per cell when you want to differentiate, and expect `evaluate` to help you look at a gradient either way. -| | `"nodes"` | `"integration_points"` | `"cells"` | -|---|---|---|---| -| arithmetic with mesh variables and `sympy` | yes | yes | yes | -| `uw.maths.Integral` | yes | yes | yes | -| `uw.function.evaluate` anywhere | yes | yes | yes | -| projection onto a mesh variable | yes | yes | yes | -| viscosity, body force, any solver term | yes | yes | yes | -| a **gradient** of the expression | yes | refused | yes | - -### Demonstration - -`docs/examples/utilities/intermediate/Ex_Swarm_Material_Index.py`. Two viscosity layers, -1 and 1000, carried as a material index and driven from the top. With the -interface on mesh edges the exact velocity is piecewise linear and lies in the -P2 velocity space, so the only error in the solve is how the material is -represented. - -```{figure} figures/material_index.png -:alt: The material mask across the interface and the resulting velocity error - -Left: the upper-material mask along a line crossing the interface, as the weak -form sees it. The nodal level set ramps linearly across a whole cell; the other -two are a step in the right place and lie on top of each other. Right: the -resulting error in the velocity against the exact layered flow. -``` - -| `proxy_location` | assembled $\int \eta$ (exact 500.5) | velocity $L_2$ error | -|---|---|---| -| `"nodes"` | 500.5000 | 8.0e-2 | -| `"integration_points"` | 500.5000 | **1.8e-7** | -| `"cells"` | 500.5000 | **1.8e-7** | - -All three integrate the viscosity correctly in the mean, which is why the -error does not show up in a bulk diagnostic. Only the placement differs, and -the placement is what the solve feels. Every particle in a cell is on the same -side of an edge-aligned interface, so the per-cell fit is constant and the -`"cells"` mapping is exact here too. - -### When the interface cuts through a cell - -Move the interface to $y = 0.53$ on an irregular mesh and no scheme can be -exact: the P2 velocity cannot hold a kink inside a cell. What separates them -is whether adding particles helps. - -| `proxy_location` | $L_2$ error, 10 particles per cell | 55 per cell | -|---|---|---| -| `"nodes"` | 8.4e-2 | 7.7e-2 | -| `"integration_points"` | 3.5e-2 | **1.9e-2** | -| `"cells"` | 4.1e-2 | 4.1e-2 | - -The integration-point mapping resolves the interface within the cell, so it -improves as the particles do. The other two are limited by what a cell-scale -representation can express, and adding particles does not move them. - -Use `"cells"` when the material property needs a gradient (the level sets are -polynomials and can be differentiated) or when the field is genuinely a -fraction rather than a label; note that a fitted fraction can leave $[0, 1]$ -between cells even though its own degrees of freedom are clamped. For a -material index at an interface, `"integration_points"` is the one to use. - ## What this rests on The reconstruction behind `"cells"`, the delta element behind -`"integration_points"`, and the guards that keep both well posed are described -in {doc}`../developer/subsystems/integration-point-variables`. The same -machinery carries semi-Lagrangian and fully Lagrangian histories, including -the viscoelastic stress history. +`"integration_points"`, the share, and the guards that keep them well posed +are described in {doc}`../developer/subsystems/integration-point-variables`. +The same machinery carries semi-Lagrangian and fully Lagrangian histories, +including the viscoelastic stress history. diff --git a/docs/api/materials.md b/docs/api/materials.md index ad8476be5..5ca84b32d 100644 --- a/docs/api/materials.md +++ b/docs/api/materials.md @@ -1,27 +1,72 @@ # Materials +Underworld3 keeps two questions apart: **what** a material is, and **where** it +is. + +*What* is a {py:class}`~underworld3.MaterialRegistry` entry — a name and a +table of properties, where a property may be a number, a quantity, or a *law* +such as `eta_0 * sympy.exp(-T.sym[0])`. A registry knows nothing about +geometry, so it can be built before there is a mesh and shared between models. + +*Where* is a **distribution**, and there are two: + +- {py:class}`~underworld3.swarm.MaterialSwarm` — carried by particles, so the + materials advect with the flow. +- {py:class}`~underworld3.MaterialRegions` — tied to the mesh, from gmsh + physical groups or from a geometric condition. Exact, and needs no particles. + +Both present the same face to a solver — `stokes.materials = materials`, which +sets every constitutive-model parameter the materials declare and the model +recognises — and both build it from the same partition of unity, one level set +per material. + +See {doc}`../advanced/particle-population-and-materials` for the user guide. + ```{eval-rst} .. automodule:: underworld3.materials :no-members: ``` -## Material Property +## Defining materials ```{eval-rst} +.. autoclass:: underworld3.MaterialRegistry + :members: + :show-inheritance: + +.. autoclass:: underworld3.MaterialDefinition + :members: + :show-inheritance: + .. autoclass:: underworld3.MaterialProperty :members: :show-inheritance: ``` -## Material Registry +## Distributing materials ```{eval-rst} -.. autoclass:: underworld3.MaterialRegistry +.. autoclass:: underworld3.swarm.MaterialSwarm + :members: + :show-inheritance: + +.. autoclass:: underworld3.MaterialRegions :members: :show-inheritance: + +.. autoclass:: underworld3.materials.MaterialDistribution + :members: + :show-inheritance: + +.. autoclass:: underworld3.materials.BoundMaterial + :members: ``` -## Multi-Material Models +## Different laws per material + +A distribution blends per-material *parameter values* into one constitutive +model. When the materials need genuinely different constitutive **laws** — +one viscous, one viscoelastic — compose the models instead: ```{eval-rst} .. autoclass:: underworld3.MultiMaterialConstitutiveModel diff --git a/docs/examples/utilities/intermediate/Ex_Swarm_Material_Index.py b/docs/examples/utilities/intermediate/Ex_Swarm_Material_Index.py index b452c9a5d..d50f75788 100644 --- a/docs/examples/utilities/intermediate/Ex_Swarm_Material_Index.py +++ b/docs/examples/utilities/intermediate/Ex_Swarm_Material_Index.py @@ -14,7 +14,7 @@ # %% [markdown] """ -# A material index read at the integration points +# Materials on a swarm **PHYSICS:** fluid_mechanics **DIFFICULTY:** intermediate @@ -22,17 +22,16 @@ ## Description -Two viscosity layers, 1 and 1000, carried by particles as an -`IndexSwarmVariable` and driven from the top. With the interface on -mesh edges the exact velocity is piecewise linear and lies in the P2 -velocity space, so the only error in the solve is how the material is -represented. - -Run with `PROXY=nodes`, `PROXY=integration_points` and `PROXY=cells`. -The nodal level set smears the interface across a cell and leaves an -L2 velocity error of 8e-2; read at the integration points, where each -point takes the material of its nearest particle, the same problem -solves to 2e-7. +Two viscosity layers, 1 and 1000, carried by particles and driven from the +top. The model names its materials and says where they are; it never +writes a level set, a mask, or a blend. + +With the interface on mesh edges the exact velocity is piecewise linear and +lies in the P2 velocity space, so the only error in the solve is how the +material is represented. Read at the integration points (the default), +where each point takes the material of its nearest particle, the problem +solves to 2e-7. Run with `PROXY=nodes` to see the nodal level set smear the +interface across a cell and leave an L2 velocity error of 8e-2. """ # %% @@ -43,30 +42,54 @@ import underworld3 as uw -PROXY = os.environ.get("PROXY", "nodes") +PROXY = os.environ.get("PROXY", "integration_points") +SAMPLING = os.environ.get("SAMPLING", "nearest") CELL = float(os.environ.get("CELL", "0.1")) ETA_TOP = float(os.environ.get("ETA_TOP", "1000")) H = float(os.environ.get("H", "0.5")) FILL = int(os.environ.get("FILL", "3")) -DEG = int(os.environ.get("DEG", "1")) OUT = os.environ.get("OUT", "runs") mesh = uw.meshing.UnstructuredSimplexBox(cellSize=CELL, qdegree=2, regular=True) v = uw.discretisation.MeshVariable("v", mesh, mesh.dim, degree=2) p = uw.discretisation.MeshVariable("p", mesh, 1, degree=1) -swarm = uw.swarm.Swarm(mesh) -mat = uw.swarm.IndexSwarmVariable("M", swarm, indices=2, proxy_degree=DEG, proxy_location=PROXY) -swarm.populate(fill_param=FILL) -X = np.asarray(swarm._particle_coordinates.data) -with uw.synchronised_array_update(): - mat.data[:, 0] = (X[:, 1] > H).astype(int) # 0 below the interface, 1 above +# %% [markdown] +""" +## The materials + +`MaterialSwarm` is a `Swarm` that carries materials. Declare them with the +property names the constitutive model knows, then paint the regions: a +symbolic condition on the mesh coordinates, a boolean array over the +particles, or a callable. The swarm is populated the first time anything +reads it, so every `add` can come first. +""" -eta = mat.createMask([1.0, ETA_TOP]) +# %% +materials = uw.swarm.MaterialSwarm( + mesh, fill_param=FILL, proxy_location=PROXY, + proxy_sampling=SAMPLING if PROXY == "integration_points" else None, +) +materials.add("lower", shear_viscosity_0=1.0, density=3300) +materials.add("upper", shear_viscosity_0=ETA_TOP, density=3400) +materials["upper"] = mesh.X[1] > H + +# %% [markdown] +""" +## The solve + +`stokes.materials = materials` sets every parameter the constitutive model +recognises — here `shear_viscosity_0`. `density` is not a viscous-model +parameter, so it stays a blended symbol for the model script to use; this +problem is driven by the boundary, so it goes unused. +""" + +# %% stokes = uw.systems.Stokes(mesh, velocityField=v, pressureField=p) stokes.constitutive_model = uw.constitutive_models.ViscousFlowModel -stokes.constitutive_model.Parameters.shear_viscosity_0 = eta +stokes.materials = materials + stokes.add_dirichlet_bc((1.0, 0.0), "Top") stokes.add_dirichlet_bc((0.0, 0.0), "Bottom") stokes.add_dirichlet_bc((sympy.oo, 0.0), "Left") @@ -74,23 +97,33 @@ stokes.tolerance = 1e-8 stokes.solve() -# Exact layered Couette profile +# %% [markdown] +""" +## Against the exact layered Couette profile +""" + +# %% A = 1.0 / (H + (1.0 - H) / ETA_TOP) Xv = np.asarray(v.coords) -vx_exact = np.where(Xv[:, 1] < H, A * Xv[:, 1], A * H + A / ETA_TOP * (Xv[:, 1] - H)) +vx_exact = np.where(Xv[:, 1] < H, A * Xv[:, 1], + A * H + A / ETA_TOP * (Xv[:, 1] - H)) err = np.abs(np.asarray(v.data[:, 0]) - vx_exact) -assembled = float(uw.maths.Integral(mesh, eta).evaluate()) + +viscosity = materials.shear_viscosity_0 +assembled = float(uw.maths.Integral(mesh, viscosity).evaluate()) exact_int = 1.0 * H + ETA_TOP * (1.0 - H) -# The material as the weak form sees it, on a fine sampling line across the interface +# the material as the weak form sees it, across the interface ys = np.linspace(max(0.0, H - 0.25), min(1.0, H + 0.25), 201) line = np.c_[np.full_like(ys, 0.5), ys] -upper = np.asarray(uw.function.evaluate(mat.sym[1], line)).reshape(-1) +upper = np.asarray(uw.function.evaluate(materials["upper"].mask, line)).reshape(-1) os.makedirs(OUT, exist_ok=True) np.savez(f"{OUT}/matindex_{PROXY}.npz", ys=ys, upper=upper, vy=Xv[:, 1], - vx=np.asarray(v.data[:, 0]), vx_exact=vx_exact, l2=np.sqrt(np.mean(err ** 2)), - linf=err.max(), assembled=assembled) -print(f"RESULT proxy={PROXY} deg={DEG} fill={FILL}: assembled int(eta) {assembled:.4f} " - f"(exact {exact_int:.4f}) | vx L2 {np.sqrt(np.mean(err**2)):.3e} Linf {err.max():.3e} " - f"| mask range {upper.min():+.4f}..{upper.max():+.4f}", flush=True) + vx=np.asarray(v.data[:, 0]), vx_exact=vx_exact, + l2=np.sqrt(np.mean(err ** 2)), linf=err.max(), assembled=assembled) + +print(f"RESULT proxy={PROXY} sampling={SAMPLING} fill={FILL}: " + f"assembled int(eta) {assembled:.4f} (exact {exact_int:.4f}) | " + f"vx L2 {np.sqrt(np.mean(err**2)):.3e} Linf {err.max():.3e} | " + f"mask range {upper.min():+.4f}..{upper.max():+.4f}", flush=True) diff --git a/src/underworld3/__init__.py b/src/underworld3/__init__.py index 4ed69e815..1469569c0 100644 --- a/src/underworld3/__init__.py +++ b/src/underworld3/__init__.py @@ -222,7 +222,12 @@ def view(): create_thermal_convection_model, ) from .parameters import ParameterRegistry, ParameterType -from .materials import MaterialRegistry, MaterialProperty +from .materials import ( + MaterialRegistry, + MaterialProperty, + MaterialDefinition, + MaterialRegions, +) from .constitutive_models import MultiMaterialConstitutiveModel # uw.quantity is THE quantity factory (returns UWQuantity, exposed alongside # for isinstance checks); uw.create_quantity is deprecated (see units.py). diff --git a/src/underworld3/cython/petsc_generic_snes_solvers.pyx b/src/underworld3/cython/petsc_generic_snes_solvers.pyx index f7b1b1951..5c747d3e8 100644 --- a/src/underworld3/cython/petsc_generic_snes_solvers.pyx +++ b/src/underworld3/cython/petsc_generic_snes_solvers.pyx @@ -160,6 +160,7 @@ class SolverBaseClass(uw_object): self._order = 0 self._constitutive_model = None + self._materials = None self._rebuild_after_mesh_update = self._build self.name = "Solver_{}_".format(self.instance_number) @@ -2076,6 +2077,8 @@ class SolverBaseClass(uw_object): ): self._check_expression_meshes() + if self._materials is not None: + self._materials.check() if self.is_setup: return @@ -2727,6 +2730,47 @@ class SolverBaseClass(uw_object): return + @property + def materials(self): + """The materials this solver's coefficients come from. + + Assigning a :class:`~underworld3.swarm.MaterialSwarm` sets every + constitutive-model parameter the materials declare *and* the model + recognises, by name — so a model script names its materials and their + properties, and never writes a level set or a mask:: + + materials = uw.swarm.MaterialSwarm(mesh, fill_param=3) + materials.add("mantle", shear_viscosity_0=1.0) + materials.add("slab", shear_viscosity_0=1.0e3, density=3400) + materials["slab"] = mesh.X[1] > 0.53 + + stokes.constitutive_model = uw.constitutive_models.ViscousFlowModel + stokes.materials = materials # sets shear_viscosity_0 + + A declared property the model does not recognise (``density`` here) is + not pushed anywhere; it is available as a blended symbol, + ``materials.density``, for the model script to use where it belongs. + One that is neither recognised nor read is reported at solve time, + because a misspelled viscosity is silently the default one. + + Properties may be changed, and materials repainted, after assignment: + the blend is symbolic and the push repeats on every change. + """ + return self._materials + + @materials.setter + def materials(self, material_swarm): + if material_swarm is None: + self._materials = None + return + if not hasattr(material_swarm, "_attach"): + raise TypeError( + "solver.materials expects a MaterialSwarm (uw.swarm.MaterialSwarm), " + f"not {type(material_swarm).__name__}" + ) + self._materials = material_swarm + material_swarm._attach(self) + @property def constitutive_model(self): """ @@ -2785,6 +2829,11 @@ class SolverBaseClass(uw_object): if self._constitutive_model.requires_stress_history and self.Unknowns.DFDt is None: self._create_stress_history_ddt(order=self._constitutive_model.order) + # Materials assigned before the constitutive model still have to + # reach it: the push is a no-op while there is no model to push to. + if getattr(self, "_materials", None) is not None: + self._materials._push_to(self) + # May not work due to flux being incomplete if self.Unknowns.DFDt is not None: self.Unknowns.DFDt.psi_fn = self._constitutive_model.flux.T diff --git a/src/underworld3/materials.py b/src/underworld3/materials.py index c2f0ca817..f13c6ffff 100644 --- a/src/underworld3/materials.py +++ b/src/underworld3/materials.py @@ -1,394 +1,880 @@ -""" -Material Management System for Underworld3 Models +r"""Materials: what they are, and where they are. + +Two questions, kept apart on purpose. + +**What a material is** is a :class:`MaterialRegistry` entry — a name and a table +of properties, where a property may be a number, a dimensional quantity, or a +*law* (``eta_0 * sympy.exp(-T.sym[0])``). Definitions carry description and +reference metadata, export and import as plain dictionaries, and say nothing +about geometry, so one registry can serve several models. + +**Where a material is** is a *distribution*. Underworld3 has two: + +- :class:`~underworld3.swarm.MaterialSwarm` — carried by particles, so it + advects with the flow. The one to use when the material moves. +- :class:`MaterialRegions` — tied to the mesh, from gmsh physical groups or + from a geometric condition. Exact, needs no particles and no population + control. The one to use when the material does not move. + +Both present the same face to a solver:: + + stokes.materials = materials -This module provides structured material management with property definitions, -region assignments, and automatic propagation to constitutive models and solvers. +which sets every constitutive-model parameter the materials declare and the +model recognises, by name. Both build that from the same partition of unity — +one level set per material — because a property that is a law cannot be stored +as a value and has to be combined symbolically. + +Example +------- +>>> rocks = uw.MaterialRegistry() +>>> rocks.add("mantle", shear_viscosity_0=1.0, density=3300) +>>> rocks.add("slab", shear_viscosity_0=1.0e3, density=3400) +>>> +>>> materials = uw.swarm.MaterialSwarm(mesh, registry=rocks, fill_param=3) +>>> materials["slab"] = mesh.X[1] > 0.53 +>>> stokes.materials = materials + +or, for a mesh that carries the geometry itself, + +>>> materials = uw.MaterialRegions(mesh, registry=rocks) +>>> materials["slab"] = "Slab" # a gmsh physical group +>>> stokes.materials = materials """ -import weakref -from typing import Any, Dict, List, Optional, Union, Callable -from dataclasses import dataclass, field +import warnings from enum import Enum +from typing import Any, Dict, List, Optional + import numpy as np +import sympy + +import underworld3 as uw + +__all__ = [ + "MaterialProperty", + "MaterialDefinition", + "MaterialRegistry", + "MaterialDistribution", + "BoundMaterial", + "MaterialRegions", + "create_standard_mantle_material", + "create_standard_crust_material", + "create_high_viscosity_material", +] + +_MIXING_RULES = ("arithmetic", "harmonic") class MaterialProperty(Enum): - """Standard material properties for geodynamic models""" + """Names for the properties a geodynamic material usually carries. - # Mechanical properties + The *value* of each member is the property name, and it is the name a + constitutive model knows it by — ``MaterialProperty.VISCOSITY`` is + ``"viscosity"``, which is the established alias for + ``shear_viscosity_0``. Using the enum is optional; a plain keyword is + equivalent and is what most models do. + """ + + # Mechanical VISCOSITY = "viscosity" DENSITY = "density" YIELD_STRESS = "yield_stress" COHESION = "cohesion" FRICTION_ANGLE = "friction_angle" - # Thermal properties + # Thermal THERMAL_CONDUCTIVITY = "thermal_conductivity" THERMAL_DIFFUSIVITY = "thermal_diffusivity" HEAT_CAPACITY = "heat_capacity" THERMAL_EXPANSION = "thermal_expansion" - # Elastic properties + # Elastic YOUNGS_MODULUS = "youngs_modulus" POISSONS_RATIO = "poissons_ratio" SHEAR_MODULUS = "shear_modulus" - # Flow properties + # Flow PERMEABILITY = "permeability" POROSITY = "porosity" - # Custom properties - CUSTOM = "custom" + +def _property_name(prop): + return prop.value if isinstance(prop, MaterialProperty) else str(prop) + + +def _as_symbolic(value, name, material): + """Coerce a declared property value into something sympy can carry.""" + if isinstance(value, sympy.Basic): + return value + try: + return sympy.sympify(value) + except (TypeError, ValueError, AttributeError): + pass + try: # a dimensional quantity + return sympy.sympify(uw.scaling.non_dimensionalise(value)) + except Exception as exc: # noqa: BLE001 - name the value + raise TypeError( + f"material {material!r}: property {name!r} = {value!r} is neither a " + "number, a sympy expression, nor a quantity that can be " + "non-dimensionalised" + ) from exc -@dataclass class MaterialDefinition: - """ - Definition of a material with its properties and metadata. + """What a material is: a name, a property table, and provenance. + + Created by :meth:`MaterialRegistry.add`. Says nothing about where the + material is — that is a distribution's job. - Attributes: - ----------- + Attributes + ---------- name : str - Material name (e.g., 'mantle', 'crust', 'plume') + index : int + Position in the registry, and therefore which level set is this + material's in any distribution built from it. properties : dict - Dictionary of property_name -> value mappings - description : str - Human-readable description - reference : str - Literature reference or source - temperature_dependent : dict - Temperature-dependent property functions - pressure_dependent : dict - Pressure-dependent property functions - constitutive_model : object - Associated constitutive model instance + Property name -> value. Values are sympy objects: a number, or a law. + description, reference : str + Free text, carried through export/import. """ - name: str - properties: Dict[str, Any] = field(default_factory=dict) - description: str = "" - reference: str = "" - temperature_dependent: Dict[str, Callable] = field(default_factory=dict) - pressure_dependent: Dict[str, Callable] = field(default_factory=dict) - constitutive_model: Optional[Any] = None - - def set_property(self, prop: Union[MaterialProperty, str], value: Any): - """Set a material property value""" - prop_name = prop.value if isinstance(prop, MaterialProperty) else prop - self.properties[prop_name] = value - - def get_property(self, prop: Union[MaterialProperty, str], default=None): - """Get a material property value""" - prop_name = prop.value if isinstance(prop, MaterialProperty) else prop - return self.properties.get(prop_name, default) - - def has_property(self, prop: Union[MaterialProperty, str]) -> bool: - """Check if material has a specific property""" - prop_name = prop.value if isinstance(prop, MaterialProperty) else prop - return prop_name in self.properties - - def evaluate_property( - self, prop: Union[MaterialProperty, str], temperature=None, pressure=None - ): - """ - Evaluate a material property, accounting for temperature/pressure dependence. - - Parameters: - ----------- - prop : MaterialProperty or str - Property to evaluate - temperature : float or array, optional - Temperature for evaluation - pressure : float or array, optional - Pressure for evaluation - - Returns: - -------- - Property value (scalar or array) - """ - prop_name = prop.value if isinstance(prop, MaterialProperty) else prop - - # Get base value - base_value = self.get_property(prop_name) - if base_value is None: - raise ValueError(f"Material '{self.name}' does not have property '{prop_name}'") - - # Apply temperature dependence - if temperature is not None and prop_name in self.temperature_dependent: - temp_func = self.temperature_dependent[prop_name] - base_value = temp_func(base_value, temperature) + def __init__(self, registry, name, index, properties=None, + description="", reference=""): + self._registry = registry + self.name = name + self.index = index + self.description = description + self.reference = reference + self.properties = {} + if properties: + self.set(**properties) + + def set(self, **properties): + """Set or replace properties, and re-push them to attached solvers.""" + for key, value in properties.items(): + key = _property_name(key) + self.properties[key] = _as_symbolic(value, key, self.name) + self._registry._changed() + return self + + # -- the pre-2026 spelling, kept working ------------------------------ + def set_property(self, prop, value): + """Set one property. ``set(**{name: value})`` is the shorter form.""" + return self.set(**{_property_name(prop): value}) + + def get_property(self, prop, default=None): + return self.properties.get(_property_name(prop), default) + + def has_property(self, prop) -> bool: + return _property_name(prop) in self.properties - # Apply pressure dependence - if pressure is not None and prop_name in self.pressure_dependent: - pressure_func = self.pressure_dependent[prop_name] - base_value = pressure_func(base_value, pressure) - - return base_value + def __repr__(self): + props = ", ".join(f"{k}={v}" for k, v in self.properties.items()) + return f"" class MaterialRegistry: - """ - Central registry for material definitions and region assignments. + """A set of material definitions, independent of any mesh or swarm. - Features: - --------- - - Material property database with validation - - Region-based material assignments - - Temperature/pressure dependent properties - - Integration with constitutive models - - Automatic property propagation to solvers + A registry is the *what*: it can be built before there is a mesh, shared + between models, exported to a dictionary and read back. Attach it to a + distribution — a :class:`~underworld3.swarm.MaterialSwarm` or a + :class:`MaterialRegions` — to say where each material is. - Example: + Examples -------- - >>> registry = MaterialRegistry() - >>> mantle = registry.create_material('mantle') - >>> mantle.set_property('viscosity', 1e21) - >>> mantle.set_property('density', 3300) - >>> registry.assign_to_region('mantle', region_id=1) + >>> rocks = uw.MaterialRegistry() + >>> rocks.add("mantle", shear_viscosity_0=1.0, density=3300) + >>> rocks.add("slab", shear_viscosity_0=1.0e3, density=3400) + >>> rocks.list_materials() + ['mantle', 'slab'] """ - def __init__(self): + def __init__(self, materials=None): self._materials: Dict[str, MaterialDefinition] = {} - self._region_assignments: Dict[int, str] = {} # region_id -> material_name - self._callbacks: List[Callable] = [] # Material change callbacks + self._order: List[str] = [] + self._callbacks = [] self._version = 0 + if materials: + for name, properties in dict(materials).items(): + self.add(name, **properties) - def create_material( - self, name: str, description: str = "", reference: str = "" - ) -> MaterialDefinition: - """ - Create a new material definition. + # -- declaring --------------------------------------------------------- + + def add(self, name, description="", reference="", **properties): + """Declare a material. - Parameters: - ----------- + Parameters + ---------- name : str - Material name - description : str - Human-readable description - reference : str - Literature reference - - Returns: - -------- + description, reference : str, optional + Free text carried through export/import. + **properties + Property values, by the name a constitutive model knows them by + (``shear_viscosity_0``, ``density``, ...). A value may be a number, + a quantity, or a symbolic law. + + Returns + ------- MaterialDefinition - New material instance """ if name in self._materials: - raise ValueError(f"Material '{name}' already exists") - - material = MaterialDefinition(name=name, description=description, reference=reference) - + raise ValueError(f"material {name!r} has already been declared") + material = MaterialDefinition( + self, name, len(self._order), properties, description, reference + ) self._materials[name] = material - self._version += 1 - + self._order.append(name) + self._changed() return material - def get_material(self, name: str) -> Optional[MaterialDefinition]: - """Get a material by name""" + def create_material(self, name, description="", reference=""): + """Declare a material with no properties yet (the pre-2026 spelling).""" + return self.add(name, description=description, reference=reference) + + def get_material(self, name) -> Optional[MaterialDefinition]: return self._materials.get(name) def list_materials(self) -> List[str]: - """List all material names""" - return list(self._materials.keys()) + """Material names, in declaration order — which is level-set order.""" + return list(self._order) - def delete_material(self, name: str): - """Delete a material definition""" - if name in self._materials: - del self._materials[name] - # Remove any region assignments - self._region_assignments = { - region_id: mat_name - for region_id, mat_name in self._region_assignments.items() - if mat_name != name - } - self._version += 1 - - def assign_to_region(self, material_name: str, region_id: int): + def delete_material(self, name): + """Remove a material, and reindex the rest. + + Only safe before a distribution has been built from the registry: the + index of a material IS which level set is its, so removing one + renumbers the others. """ - Assign a material to a mesh region. - - Parameters: - ----------- - material_name : str - Name of material to assign - region_id : int - Mesh region identifier + if name not in self._materials: + return + del self._materials[name] + self._order.remove(name) + for i, key in enumerate(self._order): + self._materials[key].index = i + self._changed() + + # -- reading ----------------------------------------------------------- + + @property + def materials(self): + """The definitions, in declaration order.""" + return tuple(self._materials[name] for name in self._order) + + def declared_properties(self): + """Every property name declared by any material.""" + names = set() + for material in self.materials: + names.update(material.properties) + return names + + def __len__(self): + return len(self._order) + + def __iter__(self): + return iter(self.materials) + + def __contains__(self, name): + return name in self._materials + + def __getitem__(self, name): + try: + return self._materials[name] + except KeyError: + raise KeyError( + f"no material {name!r}; declared: {self.list_materials()}" + ) from None + + def __repr__(self): + return f"MaterialRegistry({self.list_materials()})" + + # -- change notification ---------------------------------------------- + + def add_callback(self, callback): + """Register ``callback()`` to run whenever a definition changes.""" + self._callbacks.append(callback) + + def _changed(self): + self._version += 1 + for callback in list(self._callbacks): + try: + callback() + except Exception as exc: # noqa: BLE001 + warnings.warn(f"material registry callback failed: {exc}") + + # -- serialisation ----------------------------------------------------- + + def export_config(self) -> Dict[str, Any]: + """Export as plain data. Property values are stringified sympy.""" + return { + "materials": { + m.name: { + "properties": {k: str(v) for k, v in m.properties.items()}, + "description": m.description, + "reference": m.reference, + } + for m in self.materials + }, + "version": self._version, + } + + def import_config(self, config: Dict[str, Any]): + """Read back an :meth:`export_config` dictionary.""" + for name, entry in config.get("materials", {}).items(): + material = self.add( + name, + description=entry.get("description", ""), + reference=entry.get("reference", ""), + ) + material.set(**{ + key: sympy.sympify(value) + for key, value in entry.get("properties", {}).items() + }) + return self + + +class BoundMaterial: + """A material seen through one distribution. + + What :meth:`MaterialDistribution.__getitem__` returns: the definition plus + the things that only mean something once you know *where* the material is — + its level set, and how to paint it. + """ + + def __init__(self, distribution, definition): + self._distribution = distribution + self._definition = definition + + @property + def name(self): + return self._definition.name + + @property + def index(self): + return self._definition.index + + @property + def properties(self): + return self._definition.properties + + @property + def mask(self): + r"""This material's level set, :math:`\phi_i`, as a symbol. + + 1 where the material is, 0 where it is not. Rarely needed — a property + blend is what a model usually wants — but it is the right thing for a + per-material diagnostic, e.g. ``uw.maths.Integral(mesh, slab.mask)`` + for the area the material occupies. """ - if material_name not in self._materials: - raise ValueError(f"Material '{material_name}' does not exist") - - self._region_assignments[region_id] = material_name - self._notify_callbacks("region_assignment", region_id, material_name) - - def get_region_material(self, region_id: int) -> Optional[str]: - """Get the material assigned to a region""" - return self._region_assignments.get(region_id) - - def get_material_regions(self, material_name: str) -> List[int]: - """Get all regions assigned to a material""" - return [ - region_id - for region_id, mat_name in self._region_assignments.items() - if mat_name == material_name - ] + return self._distribution._mask_of(self._definition) + + def occupies(self, region): + """Put this material wherever ``region`` is true. - def evaluate_property_field( - self, - prop: Union[MaterialProperty, str], - region_field: np.ndarray, - temperature: Optional[np.ndarray] = None, - pressure: Optional[np.ndarray] = None, - ) -> np.ndarray: + What ``region`` may be depends on the distribution — see + :meth:`MaterialDistribution.__setitem__`. """ - Evaluate a material property over a field of region IDs. - - Parameters: - ----------- - prop : MaterialProperty or str - Property to evaluate - region_field : array - Array of region IDs - temperature : array, optional - Temperature field for evaluation - pressure : array, optional - Pressure field for evaluation - - Returns: - -------- - array - Property values corresponding to each region + self._distribution[self.name] = region + return self + + def set(self, **properties): + """Change properties, and re-push them to attached solvers.""" + self._definition.set(**properties) + return self + + def __repr__(self): + return f"<{type(self._distribution).__name__} {self._definition!r}>" + + +class MaterialDistribution: + """Shared behaviour of everything that says *where* materials are. + + A distribution owns a :class:`MaterialRegistry` and supplies one level set + per material. Everything else — blending a property into a symbol, pushing + it to a solver, the mixing rule, the unused-property check — is the same + whether the materials ride on particles or on mesh regions, and lives here. + + Subclasses provide ``_ensure_built()`` and ``_level_sets()``. + """ + + #: How many distributions have taken the default name, so that two on one + #: mesh do not collide over their level-set variable names. + _default_name_count = 0 + + def _init_distribution(self, registry=None, name=None): + self._registry = registry if registry is not None else MaterialRegistry() + if name is None: + n = MaterialDistribution._default_name_count + MaterialDistribution._default_name_count += 1 + name = "material" if n == 0 else f"material_{n}" + self._distribution_name = name + self._solvers = [] + self._mixing_rules = {} + self._read_properties = set() + self._registry.add_callback(self._push_all) + + # -- declaring (shorthand onto the registry) -------------------------- + + @property + def registry(self): + """The :class:`MaterialRegistry` these materials are defined in.""" + return self._registry + + @property + def materials(self): + """The declared materials, in order, bound to this distribution.""" + return tuple(BoundMaterial(self, m) for m in self._registry.materials) + + def add(self, name, where=None, description="", reference="", **properties): + """Declare a material here — shorthand for ``registry.add(...)``. + + Returns a :class:`BoundMaterial`, so the definition and its place in + this distribution are reachable from one handle. ``where`` is the same + as assigning a region afterwards. """ - prop_name = prop.value if isinstance(prop, MaterialProperty) else prop + self._check_can_declare(name) + self._registry.add(name, description=description, reference=reference, + **properties) + bound = self[name] + if where is not None: + self[name] = where + return bound + + def _check_can_declare(self, name): + """Subclass hook: raise if it is too late to add a material.""" - # Initialize output array - result = np.zeros_like(region_field, dtype=float) + def __getitem__(self, name): + return BoundMaterial(self, self._registry[name]) - # Evaluate property for each unique region - unique_regions = np.unique(region_field) + def __len__(self): + return len(self._registry) - for region_id in unique_regions: - material_name = self.get_region_material(region_id) - if material_name is None: - raise ValueError(f"No material assigned to region {region_id}") + # -- level sets (subclass) -------------------------------------------- - material = self.get_material(material_name) - if material is None: - raise ValueError(f"Material '{material_name}' not found") + def _ensure_built(self): + raise NotImplementedError - # Get mask for this region - mask = region_field == region_id + def _level_sets(self): + """The per-material level-set variables, in registry order.""" + raise NotImplementedError - # Extract temperature/pressure for this region if provided - region_temp = temperature[mask] if temperature is not None else None - region_pressure = pressure[mask] if pressure is not None else None + def _mask_of(self, definition): + self._ensure_built() + return self._level_sets()[definition.index].sym[0] - # Evaluate property for this region - prop_value = material.evaluate_property(prop_name, region_temp, region_pressure) + # -- properties -------------------------------------------------------- - # Assign to result - result[mask] = prop_value + def mixing(self, **rules): + """Choose how a property is blended where masks are fractional. - return result + ``materials.mixing(shear_viscosity_0="harmonic")``. Only meaningful + where a mask can take a value strictly between 0 and 1; where exactly + one mask is 1 every rule gives the same answer. - def add_callback(self, callback: Callable): + ``"arithmetic"`` (the default) is a Voigt average: for a flux at a + common gradient it is the flux blend. On a sharp contrast it does not + converge with sampling density. ``"harmonic"`` is the Reuss average, + which does. Pick on physical grounds. """ - Add a callback function for material changes. + for name, rule in rules.items(): + name = _property_name(name) + if rule not in _MIXING_RULES: + raise ValueError( + f"mixing rule for {name!r} must be one of {_MIXING_RULES}, " + f"not {rule!r}" + ) + self._mixing_rules[name] = rule + self._push_all() + return self - Parameters - ---------- - callback : callable - Function called as ``callback(event_type, *args)`` + def blend(self, name, mixing=None): + """The material-weighted symbol for property ``name``. + + Usually reached as ``materials.``; call it directly to override + the mixing rule for one use. """ - self._callbacks.append(callback) + name = _property_name(name) + missing = [m.name for m in self._registry.materials + if name not in m.properties] + if missing: + raise KeyError( + f"property {name!r} is not declared by {missing}. Every " + "material must declare a property that is blended — a material " + "with no viscosity is not a material with zero viscosity." + ) + + self._ensure_built() + self._read_properties.add(name) + values = [m.properties[name] for m in self._registry.materials] + masks = self._level_sets() + rule = mixing or self._mixing_rules.get(name, "arithmetic") + + if rule == "arithmetic": + return sum(masks[i].sym[0] * value for i, value in enumerate(values)) + return 1 / sum(masks[i].sym[0] / value for i, value in enumerate(values)) + + def __getattr__(self, name): + # Only reached when normal lookup fails, so this cannot shadow a real + # attribute. Private names never resolve to a material property. + if name.startswith("_"): + raise AttributeError(name) + try: + registry = object.__getattribute__(self, "_registry") + except AttributeError: + raise AttributeError(name) from None + if not any(name in m.properties for m in registry.materials): + raise AttributeError( + f"{type(self).__name__!r} object has no attribute {name!r}, and " + "no material declares a property of that name" + ) + return self.blend(name) + + # -- the handoff to a solver ------------------------------------------ + + def _attach(self, solver): + """Called by ``solver.materials = ...``.""" + if not any(s is solver for s in self._solvers): + self._solvers.append(solver) + self._push_to(solver) + + def _push_all(self): + for solver in self._solvers: + self._push_to(solver) + + def _push_to(self, solver): + """Set every property the solver's constitutive model recognises.""" + model = getattr(solver, "_constitutive_model", None) + if model is None: + return # pushed again when the model is set + if len(self._registry) == 0: + return + parameters = model.Parameters + recognised = set(type(parameters)._list_valid_parameters(type(parameters))) + for name in sorted(self._registry.declared_properties() & recognised): + setattr(parameters, name, self.blend(name)) + + def _recognised(self): + names = set() + for solver in self._solvers: + model = getattr(solver, "_constitutive_model", None) + if model is None: + continue + parameters = model.Parameters + names |= set( + type(parameters)._list_valid_parameters(type(parameters)) + ) + return names + + def unclaimed(self): + """Declared properties no attached model recognises and nobody read. + + Not in itself a problem: ``density`` is unclaimed until the model + script reads ``materials.density`` for its body force. It is the list + :meth:`check` looks through for misspellings. + """ + return sorted( + self._registry.declared_properties() + - self._recognised() + - self._read_properties + ) + + def check(self): + """Report a declared property that looks like a misspelled parameter. + + Called from the solver build. A property no constitutive model + recognises is perfectly normal — that is how ``density`` reaches a body + force. What is not normal is one that *nearly* matches a parameter the + model does have and that nothing has read: ``viscocity`` is not + ``viscosity``, it is silently the default viscosity, and nothing else + will ever say so. + """ + import difflib + + recognised = sorted(self._recognised()) + suspicious = [] + for name in self.unclaimed(): + close = difflib.get_close_matches(name, recognised, n=1, cutoff=0.8) + if close: + suspicious.append((name, close[0])) + for name, suggestion in suspicious: + warnings.warn( + f"material property {name!r} is declared but unused, and the " + f"constitutive model has a parameter {suggestion!r} — did you " + f"mean that? As it stands {suggestion!r} keeps its default " + f"value and nothing reads {name!r}.", + stacklevel=3, + ) + return suspicious + + # -- display ----------------------------------------------------------- + + def _object_viewer(self): + uw.pprint(f"{type(self).__name__}: {len(self._registry)} materials") + for material in self._registry.materials: + uw.pprint(f" [{material.index}] {material.name}") + for key, value in material.properties.items(): + uw.pprint(f" {key} = {value}") + + +class MaterialRegions(MaterialDistribution): + """Materials tied to the mesh rather than to particles. + + For a model whose materials do not move: layers, inclusions, a basin, a + gmsh model with physical groups. The level sets are exact — a material + either owns an integration point or it does not — and there are no + particles to populate, advect or repopulate. + + A region may be given as a mesh label (a gmsh physical group, reaching + Underworld3 as ``mesh.regions``), or as a geometric condition, which is + resolved at the integration points and so keeps sub-cell position. + + Parameters + ---------- + mesh : Mesh + registry : MaterialRegistry, optional + Where the materials are defined. A fresh one is made if omitted, and + :meth:`~MaterialDistribution.add` writes into it. + name : str, optional + Base name for the level-set variables. Defaults to ``material``, then + ``material_1`` and so on, so two distributions on one mesh do not + collide. + + Examples + -------- + >>> materials = uw.MaterialRegions(mesh) + >>> materials.add("mantle", shear_viscosity_0=1.0) + >>> materials.add("crust", shear_viscosity_0=1.0e3) + >>> materials["crust"] = "Crust" # a gmsh physical group + >>> materials["crust"] = mesh.X[1] > 0.8 # or a condition + >>> stokes.materials = materials + + See Also + -------- + underworld3.swarm.MaterialSwarm : the same interface, carried by particles. + """ - def _notify_callbacks(self, event_type: str, *args): - """Notify all callbacks of a material change""" - for callback in self._callbacks: - try: - callback(event_type, *args) - except Exception as e: - print(f"Warning: Material callback failed: {e}") + def __init__(self, mesh, registry=None, name=None): + self.mesh = mesh + self._level_set_vars = None + self._pending = [] + self._init_distribution(registry=registry, name=name) + + # -- building ---------------------------------------------------------- + + def _check_can_declare(self, name): + if self._level_set_vars is not None: + raise RuntimeError( + f"cannot add material {name!r}: the level sets are already " + "built. Declare every material before the first read." + ) + + def _ensure_built(self): + if self._level_set_vars is not None: + return + if len(self._registry) == 0: + raise RuntimeError( + "no materials have been declared — call add() before reading " + "a material property" + ) + self._level_set_vars = [ + uw.discretisation.IntegrationPointVariable( + f"{self._distribution_name}^{{[{i}]}}", self.mesh, + ) + for i in range(len(self._registry)) + ] + # material 0 owns everything not claimed by anyone else + self._level_set_vars[0].data[...] = 1.0 + for i in range(1, len(self._level_set_vars)): + self._level_set_vars[i].data[...] = 0.0 - def export_config(self) -> Dict[str, Any]: - """Export material configuration""" - return { - "materials": { - name: { - "properties": mat.properties, - "description": mat.description, - "reference": mat.reference, - } - for name, mat in self._materials.items() - }, - "region_assignments": dict(self._region_assignments), - "version": self._version, - } + pending, self._pending = self._pending, [] + for definition, region in pending: + self._paint(definition, region) - def import_config(self, config: Dict[str, Any]): - """Import material configuration from exported dict""" - if "materials" in config: - for name, mat_config in config["materials"].items(): - material = self.create_material( - name, mat_config.get("description", ""), mat_config.get("reference", "") - ) - material.properties = mat_config.get("properties", {}) + def _level_sets(self): + return self._level_set_vars - if "region_assignments" in config: - self._region_assignments = config["region_assignments"] + # -- painting ---------------------------------------------------------- - def __repr__(self): - return f"MaterialRegistry({len(self._materials)} materials, {len(self._region_assignments)} assignments)" + def __setitem__(self, name, region): + """Assign a region to a material. + + ``region`` may be + + - a mesh label name (``"Crust"``), optionally ``(name, value)`` — the + cells in that label, and every integration point in them; + - a symbolic condition on the mesh coordinates (``mesh.X[1] > 0.8``, + with ``&``, ``|``, ``~``), resolved at each integration point; + - a boolean array over the integration points, or a callable of their + coordinates. + + Assignment is ordered and cumulative: a later region overwrites an + earlier one where they overlap. + """ + definition = self._registry[name] + if self._level_set_vars is None: + self._pending.append((definition, region)) + else: + self._paint(definition, region) + + def _paint(self, definition, region): + selected = self._region_mask(region) + for i, var in enumerate(self._level_set_vars): + values = np.asarray(var.data).reshape(-1).copy() + values[selected] = 1.0 if i == definition.index else 0.0 + var.data[:, 0] = values + + def _integration_points(self): + self._ensure_built() + return np.asarray(self._level_set_vars[0].integration_points) + + def _region_mask(self, region): + """A boolean array over the flattened integration points.""" + points = self._integration_points() + ncells, nq, _ = points.shape + flat = points.reshape(-1, points.shape[-1]) + + if isinstance(region, str): + return self._label_mask(region, None, ncells, nq) + if (isinstance(region, tuple) and len(region) == 2 + and isinstance(region[0], str)): + return self._label_mask(region[0], region[1], ncells, nq) + if isinstance(region, np.ndarray): + selected = np.asarray(region).reshape(-1) + if selected.dtype != bool or selected.shape[0] != flat.shape[0]: + raise ValueError( + "a region given as an array must be a boolean array of " + f"length {flat.shape[0]} (the integration points), not " + f"{selected.dtype} of length {selected.shape[0]}" + ) + return selected + if isinstance(region, sympy.Basic): + return _condition_mask(region, flat) + if callable(region): + return np.asarray(region(flat), dtype=bool).reshape(-1) + + raise TypeError( + "a region must be a mesh label name, a symbolic condition on the " + "mesh coordinates, a boolean array over the integration points, or " + f"a callable of their coordinates — not {type(region).__name__}" + ) + + def _label_mask(self, label_name, label_value, ncells, nq): + """Integration points of the cells carried by a mesh label.""" + dm = self.mesh.dm + if not dm.hasLabel(label_name): + available = [dm.getLabelName(i) for i in range(dm.getNumLabels())] + regions = getattr(self.mesh, "regions", None) + if regions is not None: + available += [r.name for r in regions] + raise KeyError( + f"the mesh has no label {label_name!r}. Available: " + f"{sorted(set(available))}" + ) + if label_value is None: + regions = getattr(self.mesh, "regions", None) + if regions is not None and label_name in regions.__members__: + label_value = regions[label_name].value + else: + values = dm.getLabelIdIS(label_name).getIndices() + if len(values) != 1: + raise ValueError( + f"label {label_name!r} carries values {list(values)}; " + "say which with materials[name] = (label, value)" + ) + label_value = int(values[0]) + + c_start, c_end = dm.getHeightStratum(0) + stratum = dm.getStratumIS(label_name, label_value) + cells = np.asarray(stratum.getIndices()) if stratum is not None else np.zeros(0, int) + cells = cells[(cells >= c_start) & (cells < c_end)] - c_start + + selected = np.zeros((ncells, nq), dtype=bool) + selected[cells] = True + return selected.reshape(-1) + + +def _condition_mask(condition, coords): + """Evaluate a symbolic condition at ``coords`` -> boolean array.""" + import sympy.logic.boolalg as boolalg + from sympy.core.relational import Relational + + n = coords.shape[0] + + if isinstance(condition, boolalg.BooleanTrue): + return np.ones(n, dtype=bool) + if isinstance(condition, boolalg.BooleanFalse): + return np.zeros(n, dtype=bool) + if isinstance(condition, sympy.And): + return np.logical_and.reduce( + [_condition_mask(a, coords) for a in condition.args]) + if isinstance(condition, sympy.Or): + return np.logical_or.reduce( + [_condition_mask(a, coords) for a in condition.args]) + if isinstance(condition, sympy.Not): + return ~_condition_mask(condition.args[0], coords) + + if isinstance(condition, Relational): + values = np.asarray( + uw.function.evaluate(condition.lhs - condition.rhs, coords) + ).reshape(-1) + if isinstance(condition, sympy.StrictGreaterThan): + return values > 0.0 + if isinstance(condition, sympy.GreaterThan): + return values >= 0.0 + if isinstance(condition, sympy.StrictLessThan): + return values < 0.0 + if isinstance(condition, sympy.LessThan): + return values <= 0.0 + if isinstance(condition, sympy.Eq): + return np.isclose(values, 0.0) + if isinstance(condition, sympy.Ne): + return ~np.isclose(values, 0.0) + + raise TypeError( + f"cannot read {condition!r} as a region: expected a comparison of mesh " + "coordinates, or an &/|/~ combination of them" + ) -# Common material definitions for geodynamics -def create_standard_mantle_material(registry: MaterialRegistry) -> MaterialDefinition: - """Create a standard mantle material with typical properties""" - material = registry.create_material( +# --------------------------------------------------------------------------- +# Convenience definitions. The values are SI; non-dimensionalise them, or set +# reference quantities on the model, before using them in a solve. +# --------------------------------------------------------------------------- + +def create_standard_mantle_material(registry: MaterialRegistry): + """A standard upper-mantle material (Turcotte & Schubert, 2014).""" + return registry.add( "mantle", description="Standard upper mantle material", reference="Turcotte & Schubert (2014)", + viscosity=1e21, density=3300, + thermal_conductivity=3.0, thermal_diffusivity=1e-6, + thermal_expansion=3e-5, ) - material.set_property(MaterialProperty.VISCOSITY, 1e21) # Pa·s - material.set_property(MaterialProperty.DENSITY, 3300) # kg/m³ - material.set_property(MaterialProperty.THERMAL_CONDUCTIVITY, 3.0) # W/m/K - material.set_property(MaterialProperty.THERMAL_DIFFUSIVITY, 1e-6) # m²/s - material.set_property(MaterialProperty.THERMAL_EXPANSION, 3e-5) # K⁻¹ - - return material - -def create_standard_crust_material(registry: MaterialRegistry) -> MaterialDefinition: - """Create a standard crustal material with typical properties""" - material = registry.create_material( +def create_standard_crust_material(registry: MaterialRegistry): + """A standard continental-crust material (Turcotte & Schubert, 2014).""" + return registry.add( "crust", description="Standard continental crust material", reference="Turcotte & Schubert (2014)", + viscosity=1e22, density=2700, + thermal_conductivity=2.5, thermal_diffusivity=1e-6, + thermal_expansion=3e-5, ) - material.set_property(MaterialProperty.VISCOSITY, 1e22) # Pa·s - material.set_property(MaterialProperty.DENSITY, 2700) # kg/m³ - material.set_property(MaterialProperty.THERMAL_CONDUCTIVITY, 2.5) # W/m/K - material.set_property(MaterialProperty.THERMAL_DIFFUSIVITY, 1e-6) # m²/s - material.set_property(MaterialProperty.THERMAL_EXPANSION, 3e-5) # K⁻¹ - - return material - -def create_high_viscosity_material( - registry: MaterialRegistry, name: str = "high_visc", viscosity_contrast: float = 1000 -) -> MaterialDefinition: - """Create a high viscosity material for inclusion studies""" - material = registry.create_material( +def create_high_viscosity_material(registry: MaterialRegistry, + name: str = "high_visc", + viscosity_contrast: float = 1000): + """A stiff inclusion, for viscosity-contrast studies.""" + return registry.add( name, description=f"High viscosity material (contrast {viscosity_contrast}x)", reference="User defined", + viscosity=1e21 * viscosity_contrast, density=3300, + thermal_conductivity=3.0, thermal_diffusivity=1e-6, ) - - # Base properties similar to mantle - material.set_property(MaterialProperty.VISCOSITY, 1e21 * viscosity_contrast) - material.set_property(MaterialProperty.DENSITY, 3300) - material.set_property(MaterialProperty.THERMAL_CONDUCTIVITY, 3.0) - material.set_property(MaterialProperty.THERMAL_DIFFUSIVITY, 1e-6) - - return material diff --git a/src/underworld3/swarm.py b/src/underworld3/swarm.py index 66331104e..3ee2ce303 100644 --- a/src/underworld3/swarm.py +++ b/src/underworld3/swarm.py @@ -6048,3 +6048,9 @@ def advection( ## - PIC layouts of particles are not directly available / must be done by hand ## - No automatic migration - must compute ranks for the particle swarms ## - No automatic definition of coordinate fields (need to add by hand) + + +# Materials live in their own module (this one is long enough) but belong to +# the swarm namespace: a MaterialSwarm IS a Swarm. Imported at the end so the +# submodule can import Swarm and IndexSwarmVariable from here. +from underworld3.swarm_materials import MaterialSwarm # noqa: E402,F401 diff --git a/src/underworld3/swarm_materials.py b/src/underworld3/swarm_materials.py new file mode 100644 index 000000000..1b224b60c --- /dev/null +++ b/src/underworld3/swarm_materials.py @@ -0,0 +1,241 @@ +r"""Materials carried by particles. + +The particle half of the material system: a :class:`MaterialSwarm` is a +:class:`~underworld3.swarm.Swarm` that carries a +:class:`~underworld3.materials.MaterialRegistry`, so the materials advect with +the flow. Use it when the material moves; use +:class:`~underworld3.materials.MaterialRegions` when it does not. + + materials = uw.swarm.MaterialSwarm(mesh, fill_param=3) + + materials.add("mantle", shear_viscosity_0=1.0, density=3300) + materials.add("slab", shear_viscosity_0=1.0e3, density=3400) + + materials["slab"] = mesh.X[1] > 0.53 + + stokes.materials = materials + stokes.bodyforce = -materials.density * mesh.CoordinateSystem.unit_e_1 + +Everything about *what* a material is — declaring it, its properties, blending +them into the symbol a solver reads — lives in +:mod:`underworld3.materials` and is shared with the mesh-region distribution. +What is here is *where*: the particles, the integer label they carry, and the +level sets built from it. + +Why a partition of unity, when the masks are 0 or 1 +--------------------------------------------------- +If every material's property were a *number*, the level sets would be +redundant: exactly one mask is 1 at each integration point, so +:math:`\sum_i \phi_i \eta_i` is a select, and one stored coefficient field +would do the same job. The masks earn their place the moment a property is a +*law* — + + materials.add("crust", shear_viscosity_0=eta_0 * sympy.exp(-T.sym[0])) + +— because there is then no number to store, and the only way to combine N +expressions into one symbol the assembler can compile is the weighted sum. +That is also why a material property must not be evaluated on the particles +and sampled: the solver needs the law, not an answer to it. +""" + +import numpy as np +import sympy + +import underworld3 as uw +from underworld3.materials import MaterialDistribution, _condition_mask +from underworld3.swarm import IndexSwarmVariable, Swarm + +__all__ = ["MaterialSwarm"] + + +class MaterialSwarm(MaterialDistribution, Swarm): + """A swarm that carries materials. + + Parameters + ---------- + mesh : Mesh + The mesh the particles live on. + registry : MaterialRegistry, optional + Where the materials are defined. A fresh one is made if omitted, and + :meth:`add` writes into it; pass one to share definitions with another + model or with a :class:`~underworld3.materials.MaterialRegions`. + fill_param : int, default 3 + Particles per cell at population. The swarm is populated lazily, the + first time anything needs particles, so that every ``add`` can happen + first; call :meth:`populate` to force it. + proxy_sampling : {"nearest", "share"}, default "nearest" + How each integration point reads the particles. ``"nearest"`` gives + each point the material of its nearest particle — masks are exactly 0 + or 1, nothing is mixed and no mixing rule is implied. ``"share"`` + gives fractional masks in a cell the interface crosses; use it only + when the material genuinely *is* a sub-cell mixture, and set the + mixing rule deliberately (see + :meth:`~underworld3.materials.MaterialDistribution.mixing`). + proxy_location : {"integration_points", "cells", "nodes"} + Where the level sets live. The default reads the material where the + assembler evaluates the weak form. ``"cells"`` is the one to choose if + a solve needs the *gradient* of a material property. + name : str, optional + Base name for the underlying index variable and its level sets. + Defaults to ``material``, then ``material_1`` and so on, so two + distributions on one mesh do not collide. + + Examples + -------- + >>> materials = uw.swarm.MaterialSwarm(mesh, fill_param=3) + >>> materials.add("mantle", shear_viscosity_0=1.0, density=3300) + >>> materials.add("slab", shear_viscosity_0=1.0e3, density=3400) + >>> materials["slab"] = mesh.X[1] > 0.53 + >>> stokes.materials = materials + + It is a swarm, so it also advects and repopulates: + + >>> materials.population_control = dict(min_per_cell=8) + >>> materials.advection(v.sym, dt) + + See Also + -------- + underworld3.materials.MaterialRegions : the same interface, tied to the mesh. + underworld3.materials.MaterialRegistry : where the definitions live. + """ + + def __init__( + self, + mesh, + registry=None, + fill_param=3, + proxy_sampling="nearest", + proxy_location="integration_points", + name=None, + recycle_rate=0, + verbose=False, + clip_to_mesh=True, + ): + # Material bookkeeping BEFORE the Swarm constructor: Swarm touches + # attributes that __getattr__ would otherwise try to resolve as a + # material property. + self._material_pending = [] + self._material_fill_param = fill_param + self._material_proxy_sampling = proxy_sampling + self._material_proxy_location = proxy_location + self._index_var = None + self._init_distribution(registry=registry, name=name) + + Swarm.__init__( + self, mesh, recycle_rate=recycle_rate, verbose=verbose, + clip_to_mesh=clip_to_mesh, + ) + + # -- the index variable, and the particles ---------------------------- + + @property + def index(self): + """The underlying :class:`~underworld3.swarm.IndexSwarmVariable`. + + The machinery, exposed for the cases this interface does not cover. + A model should not normally need it. + """ + self._ensure_built() + return self._index_var + + def _check_can_declare(self, name): + if self._index_var is not None: + raise RuntimeError( + f"cannot add material {name!r}: the swarm is already populated " + f"with {len(self._registry)} materials and their level sets. " + "Declare every material before the first read (or before " + "calling populate)." + ) + + def populate(self, fill_param=None): + """Create the particles and the level sets, and apply any painting. + + Called automatically the first time anything reads the materials; call + it explicitly to fix the moment, or to override ``fill_param``. + """ + if fill_param is not None: + self._material_fill_param = fill_param + self._ensure_built() + return self + + def _ensure_built(self): + if self._index_var is not None: + return + if len(self._registry) == 0: + raise RuntimeError( + "no materials have been declared — call add() before reading " + "a material property" + ) + + self._index_var = IndexSwarmVariable( + self._distribution_name, + self, + indices=len(self._registry), + proxy_location=self._material_proxy_location, + proxy_sampling=( + self._material_proxy_sampling + if self._material_proxy_location == "integration_points" + else None + ), + ) + # local_size is -1, not 0, on a swarm that has never been populated. + if self.local_size <= 0: + Swarm.populate(self, fill_param=self._material_fill_param) + + pending, self._material_pending = self._material_pending, [] + for definition, region in pending: + self._paint(definition, region) + + def _level_sets(self): + return self._index_var._meshLevelSetVars + + # -- painting --------------------------------------------------------- + + def __setitem__(self, name, region): + """Put a material wherever ``region`` is true. + + ``region`` may be a symbolic condition on the mesh coordinates + (``mesh.X[1] > 0.53``, with ``&``, ``|``, ``~``), a boolean array over + the particles, or a callable of the particle coordinate array. + Painting is ordered and cumulative: a later region overwrites an + earlier one where they overlap. + """ + definition = self._registry[name] + if self._index_var is None: + # Deferred so that every add() can still happen; applied in order + # at population time. + self._material_pending.append((definition, region)) + else: + self._paint(definition, region) + + def _paint(self, definition, region): + selected = self._region_mask(region) + with uw.synchronised_array_update(): + self._index_var.data[selected, 0] = definition.index + + def _region_mask(self, region): + """A boolean array over the particles.""" + coords = np.asarray(self._particle_coordinates.data) + n = coords.shape[0] + + if isinstance(region, np.ndarray): + selected = np.asarray(region).reshape(-1) + if selected.dtype != bool or selected.shape[0] != n: + raise ValueError( + f"a region given as an array must be a boolean array of " + f"length {n} (the local particle count), not " + f"{selected.dtype} of length {selected.shape[0]}" + ) + return selected + + if isinstance(region, sympy.Basic): + return _condition_mask(region, coords) + + if callable(region): + return np.asarray(region(coords), dtype=bool).reshape(-1) + + raise TypeError( + "a region must be a symbolic condition on the mesh coordinates " + "(e.g. mesh.X[1] > 0.53), a boolean array over the particles, or " + f"a callable of the coordinate array — not {type(region).__name__}" + ) diff --git a/tests/test_0072_material_swarm.py b/tests/test_0072_material_swarm.py new file mode 100644 index 000000000..edb7c8e11 --- /dev/null +++ b/tests/test_0072_material_swarm.py @@ -0,0 +1,243 @@ +"""Materials named on a swarm, with no level sets in sight. + +``MaterialSwarm`` is the user-facing material interface: declare the +materials and their properties, say where each one is, hand the swarm to the +solver. The index variable, the level sets and the blend are machinery. +""" + +import warnings + +import numpy as np +import pytest +import sympy + +import underworld3 as uw + +pytestmark = [pytest.mark.level_1, pytest.mark.tier_a] + +ETA_TOP, H = 1.0e3, 0.5 + + +def _box(cell_size=0.1, regular=True): + return uw.meshing.UnstructuredSimplexBox( + cellSize=cell_size, qdegree=2, regular=regular + ) + + +def _layered(mesh, tag, fill=3, **kwargs): + materials = uw.swarm.MaterialSwarm(mesh, fill_param=fill, name=tag, **kwargs) + materials.add("lower", shear_viscosity_0=1.0, density=3300) + materials.add("upper", shear_viscosity_0=ETA_TOP, density=3400) + materials["upper"] = mesh.X[1] > H + return materials + + +def _couette(mesh, tag, materials): + v = uw.discretisation.MeshVariable(f"v{tag}", mesh, mesh.dim, degree=2) + p = uw.discretisation.MeshVariable(f"p{tag}", mesh, 1, degree=1) + stokes = uw.systems.Stokes(mesh, velocityField=v, pressureField=p) + stokes.constitutive_model = uw.constitutive_models.ViscousFlowModel + stokes.materials = materials + stokes.add_dirichlet_bc((1.0, 0.0), "Top") + stokes.add_dirichlet_bc((0.0, 0.0), "Bottom") + stokes.add_dirichlet_bc((sympy.oo, 0.0), "Left") + stokes.add_dirichlet_bc((sympy.oo, 0.0), "Right") + stokes.tolerance = 1e-8 + stokes.solve() + A = 1.0 / (H + (1.0 - H) / ETA_TOP) + X = np.asarray(v.coords) + exact = np.where(X[:, 1] < H, A * X[:, 1], A * H + A / ETA_TOP * (X[:, 1] - H)) + return np.sqrt(np.mean((np.asarray(v.data[:, 0]) - exact) ** 2)) + + +def test_a_model_names_materials_and_never_writes_a_mask(): + """The whole interface: two named materials, a region, one assignment.""" + mesh = _box() + materials = _layered(mesh, "Ma") + + assert _couette(mesh, "a", materials) < 1e-5 + # and the blend is exactly what the assembler integrated + assert abs( + float(uw.maths.Integral(mesh, materials.shear_viscosity_0).evaluate()) + - (1.0 * H + ETA_TOP * (1.0 - H)) + ) < 1e-8 + assert abs( + float(uw.maths.Integral(mesh, materials["upper"].mask).evaluate()) - (1 - H) + ) < 1e-8 + + +def test_a_property_may_be_a_law_not_a_number(): + """The reason the partition of unity exists: a material whose viscosity is + an expression cannot be stored as a value at the integration points, but it + blends symbolically.""" + mesh = _box(cell_size=0.2) + T = uw.discretisation.MeshVariable("Tlaw", mesh, 1, degree=1) + with uw.synchronised_array_update(): + T.data[:, 0] = np.asarray(T.coords)[:, 1] + + materials = uw.swarm.MaterialSwarm(mesh, fill_param=3, name="Mlaw") + materials.add("a", shear_viscosity_0=1.0) + materials.add("b", shear_viscosity_0=10 * sympy.exp(-T.sym[0])) + materials["b"] = mesh.X[1] > H + + blended = materials.shear_viscosity_0 + assert T.sym[0] in blended.atoms(type(T.sym[0])) # the law survived + # exact: 0.5 * 1 + integral over the top half of 10 exp(-y) + exact = 0.5 + 10.0 * (np.exp(-0.5) - np.exp(-1.0)) + assert abs(float(uw.maths.Integral(mesh, blended).evaluate()) - exact) < 2e-3 + + +@pytest.mark.parametrize("kind", ["symbolic", "combined", "array", "callable"]) +def test_regions_can_be_written_four_ways(kind): + mesh = _box(cell_size=0.2) + materials = uw.swarm.MaterialSwarm(mesh, fill_param=3, name=f"Mr{kind[:4]}") + materials.add("bg", shear_viscosity_0=1.0) + materials.add("box", shear_viscosity_0=2.0) + materials.populate() + + x, y = mesh.X + if kind == "symbolic": + region, area = y > H, 0.5 + elif kind == "combined": + region, area = (y > H) & (x < 0.5), 0.25 + elif kind == "array": + coords = np.asarray(materials._particle_coordinates.data) + region, area = coords[:, 1] > H, 0.5 + else: + region, area = (lambda c: c[:, 1] > H), 0.5 + + materials["box"] = region + assert abs( + float(uw.maths.Integral(mesh, materials["box"].mask).evaluate()) - area + ) < 0.02 + + +def test_only_recognised_properties_reach_the_constitutive_model(): + """shear_viscosity_0 is pushed; density is not a viscous-model parameter + and stays a symbol for the model script to use in the body force.""" + mesh = _box(cell_size=0.2) + materials = _layered(mesh, "Mp", fill=2) + v = uw.discretisation.MeshVariable("vp", mesh, mesh.dim, degree=2) + p = uw.discretisation.MeshVariable("pp", mesh, 1, degree=1) + stokes = uw.systems.Stokes(mesh, velocityField=v, pressureField=p) + stokes.constitutive_model = uw.constitutive_models.ViscousFlowModel + stokes.materials = materials + + pushed = stokes.constitutive_model.Parameters.shear_viscosity_0 + assert abs( + float(uw.maths.Integral(mesh, pushed.sym if hasattr(pushed, "sym") else pushed + ).evaluate()) - (1.0 * H + ETA_TOP * (1.0 - H)) + ) < 1e-8 + + assert not hasattr(stokes.constitutive_model.Parameters, "density") + assert abs( + float(uw.maths.Integral(mesh, materials.density).evaluate()) + - (3300 * H + 3400 * (1 - H)) + ) < 1e-8 + + +def test_a_property_nothing_uses_is_reported(): + """A misspelled viscosity is silently the default one, so say so.""" + mesh = _box(cell_size=0.25) + materials = uw.swarm.MaterialSwarm(mesh, fill_param=2, name="Mw") + materials.add("a", shear_viscosity_0=1.0, viscocity=99.0) + materials.add("b", shear_viscosity_0=2.0, viscocity=99.0) + materials["b"] = mesh.X[1] > H + + v = uw.discretisation.MeshVariable("vw", mesh, mesh.dim, degree=2) + p = uw.discretisation.MeshVariable("pw", mesh, 1, degree=1) + stokes = uw.systems.Stokes(mesh, velocityField=v, pressureField=p) + stokes.constitutive_model = uw.constitutive_models.ViscousFlowModel + stokes.materials = materials + stokes.add_dirichlet_bc((0.0, 0.0), "Top") + stokes.add_dirichlet_bc((0.0, 0.0), "Bottom") + + with warnings.catch_warnings(record=True) as caught: + warnings.simplefilter("always") + stokes._build() + assert any("viscocity" in str(w.message) for w in caught), [ + str(w.message) for w in caught + ] + + +def test_a_property_missing_from_one_material_is_an_error(): + mesh = _box(cell_size=0.25) + materials = uw.swarm.MaterialSwarm(mesh, fill_param=2, name="Mm") + materials.add("a", shear_viscosity_0=1.0, density=3300) + materials.add("b", shear_viscosity_0=2.0) # no density + with pytest.raises(KeyError, match="density"): + materials.density + + +def test_materials_must_be_declared_before_the_swarm_is_populated(): + mesh = _box(cell_size=0.25) + materials = uw.swarm.MaterialSwarm(mesh, fill_param=2, name="Md") + materials.add("a", shear_viscosity_0=1.0) + materials.populate() + with pytest.raises(RuntimeError, match="already populated"): + materials.add("b", shear_viscosity_0=2.0) + + +def test_a_property_changed_after_attachment_reaches_the_solver(): + mesh = _box(cell_size=0.2) + materials = _layered(mesh, "Mc", fill=2) + v = uw.discretisation.MeshVariable("vc", mesh, mesh.dim, degree=2) + p = uw.discretisation.MeshVariable("pc", mesh, 1, degree=1) + stokes = uw.systems.Stokes(mesh, velocityField=v, pressureField=p) + stokes.constitutive_model = uw.constitutive_models.ViscousFlowModel + stokes.materials = materials + + materials["upper"].set(shear_viscosity_0=7.0) + pushed = stokes.constitutive_model.Parameters.shear_viscosity_0 + expr = pushed.sym if hasattr(pushed, "sym") else pushed + assert abs( + float(uw.maths.Integral(mesh, expr).evaluate()) - (1.0 * H + 7.0 * (1 - H)) + ) < 1e-8 + + +def test_the_mixing_rule_only_matters_for_fractional_masks(): + """With the default sampling exactly one mask is 1, so arithmetic and + harmonic blending give the same integral; with the share they do not.""" + mesh = _box(cell_size=0.15, regular=False) + sharp = _layered(mesh, "Msh", fill=4) + both = [ + float(uw.maths.Integral(mesh, sharp.blend("shear_viscosity_0", m)).evaluate()) + for m in ("arithmetic", "harmonic") + ] + assert abs(both[0] - both[1]) < 1e-6 * abs(both[0]) + + shared = _layered(mesh, "Msr", fill=4, proxy_sampling="share") + both = [ + float(uw.maths.Integral(mesh, shared.blend("shear_viscosity_0", m)).evaluate()) + for m in ("arithmetic", "harmonic") + ] + assert abs(both[0] - both[1]) > 1.0 + + +def test_it_is_a_swarm(): + """Advection, population control and extra state variables all still work: + a MaterialSwarm is a Swarm.""" + mesh = uw.meshing.UnstructuredSimplexBox( + minCoords=(-1.0, -0.5), maxCoords=(1.0, 0.5), cellSize=0.15, qdegree=2 + ) + materials = uw.swarm.MaterialSwarm(mesh, fill_param=3, name="Mad") + materials.add("bg", shear_viscosity_0=1.0) + materials.add("layer", shear_viscosity_0=10.0) + strain = uw.swarm.SwarmVariable( + "eps", materials, 1, proxy_location="integration_points", + proxy_sampling="share", + ) + materials["layer"] = sympy.Abs(mesh.X[1]) < 0.2 + materials.population_control = dict(min_per_cell=6) + + area0 = float(uw.maths.Integral(mesh, materials["layer"].mask).evaluate()) + x, y = mesh.X + for _ in range(6): + materials.advection(sympy.Matrix([[x, -y]]), 0.05, order=2) + + labels = np.unique(np.asarray(materials.index.data).reshape(-1)) + assert set(labels.tolist()) <= {0, 1} # still labels + area1 = float(uw.maths.Integral(mesh, materials["layer"].mask).evaluate()) + assert area1 < area0 # the layer thinned + assert area1 > 0.3 * area0 # but did not fall apart + assert np.asarray(strain.data).shape[0] == materials.local_size diff --git a/tests/test_0073_material_regions.py b/tests/test_0073_material_regions.py new file mode 100644 index 000000000..54d36d500 --- /dev/null +++ b/tests/test_0073_material_regions.py @@ -0,0 +1,176 @@ +"""Materials tied to the mesh rather than to particles. + +``MaterialRegions`` is the other distribution: same declaration, same handoff +to a solver, but the level sets come from mesh labels or from geometry, so +there are no particles to populate or advect. A registry can be shared between +the two. +""" + +import numpy as np +import pytest +import sympy + +import underworld3 as uw + +pytestmark = [pytest.mark.level_1, pytest.mark.tier_a] + +ETA_TOP, H = 1.0e3, 0.5 + + +def _box(cell_size=0.1, regular=True): + return uw.meshing.UnstructuredSimplexBox( + cellSize=cell_size, qdegree=2, regular=regular + ) + + +def _couette(mesh, tag, materials, h=H): + v = uw.discretisation.MeshVariable(f"v{tag}", mesh, mesh.dim, degree=2) + p = uw.discretisation.MeshVariable(f"p{tag}", mesh, 1, degree=1) + stokes = uw.systems.Stokes(mesh, velocityField=v, pressureField=p) + stokes.constitutive_model = uw.constitutive_models.ViscousFlowModel + stokes.materials = materials + stokes.add_dirichlet_bc((1.0, 0.0), "Top") + stokes.add_dirichlet_bc((0.0, 0.0), "Bottom") + stokes.add_dirichlet_bc((sympy.oo, 0.0), "Left") + stokes.add_dirichlet_bc((sympy.oo, 0.0), "Right") + stokes.tolerance = 1e-8 + stokes.solve() + A = 1.0 / (h + (1.0 - h) / ETA_TOP) + X = np.asarray(v.coords) + exact = np.where(X[:, 1] < h, A * X[:, 1], A * h + A / ETA_TOP * (X[:, 1] - h)) + return np.sqrt(np.mean((np.asarray(v.data[:, 0]) - exact) ** 2)) + + +def test_regions_need_no_particles(): + """The same model as the swarm case, with the geometry on the mesh.""" + mesh = _box() + materials = uw.MaterialRegions(mesh, name="Rc") + materials.add("lower", shear_viscosity_0=1.0, density=3300) + materials.add("upper", shear_viscosity_0=ETA_TOP, density=3400) + materials["upper"] = mesh.X[1] > H + + assert _couette(mesh, "rc", materials) < 1e-5 + assert abs( + float(uw.maths.Integral(mesh, materials.shear_viscosity_0).evaluate()) + - (1.0 * H + ETA_TOP * (1.0 - H)) + ) < 1e-8 + + +def test_region_masks_are_a_sharp_partition_of_unity(): + mesh = _box(cell_size=0.15, regular=False) + materials = uw.MaterialRegions(mesh, name="Rp") + materials.add("a", shear_viscosity_0=1.0) + materials.add("b", shear_viscosity_0=2.0) + materials.add("c", shear_viscosity_0=3.0) + materials["b"] = mesh.X[1] > 0.33 + materials["c"] = mesh.X[1] > 0.66 + + materials._ensure_built() + U = np.column_stack( + [np.asarray(v.data[:, 0]) for v in materials._level_sets()] + ) + assert np.allclose(U.sum(axis=1), 1.0, atol=1e-12), U.sum(axis=1) + assert set(np.unique(U).tolist()) <= {0.0, 1.0} # no fractions, ever + assert abs(float(uw.maths.Integral(mesh, materials["c"].mask).evaluate()) + - (1 - 0.66)) < 0.02 + + +def test_a_region_can_come_from_a_mesh_label(): + """The gmsh-physical-group route, exercised with a label built by hand.""" + mesh = _box(cell_size=0.2) + dm = mesh.dm + c0, c1 = dm.getHeightStratum(0) + centroids = np.array([dm.computeCellGeometryFVM(c)[1] for c in range(c0, c1)]) + + dm.createLabel("TopHalf") + upper_cells = [c for c in range(c0, c1) if centroids[c - c0][1] > H] + for c in upper_cells: + dm.setLabelValue("TopHalf", c, 1) + + materials = uw.MaterialRegions(mesh, name="Rl") + materials.add("lower", shear_viscosity_0=1.0) + materials.add("upper", shear_viscosity_0=ETA_TOP) + materials["upper"] = "TopHalf" + + area = float(uw.maths.Integral(mesh, materials["upper"].mask).evaluate()) + assert abs(area - (1 - H)) < 0.05, area + + with pytest.raises(KeyError, match="no label"): + materials["upper"] = "NotALabel" + + +def test_a_registry_is_shared_between_distributions(): + """Definitions live in the registry, so two distributions can use one set + of materials — and a property change reaches both.""" + mesh = _box(cell_size=0.2) + rocks = uw.MaterialRegistry() + rocks.add("lower", shear_viscosity_0=1.0) + rocks.add("upper", shear_viscosity_0=ETA_TOP) + + regions = uw.MaterialRegions(mesh, registry=rocks, name="Rsh") + regions["upper"] = mesh.X[1] > H + swarm = uw.swarm.MaterialSwarm(mesh, registry=rocks, fill_param=3, name="Ssh") + swarm["upper"] = mesh.X[1] > H + + exact = 1.0 * H + ETA_TOP * (1.0 - H) + for distribution in (regions, swarm): + got = float( + uw.maths.Integral(mesh, distribution.shear_viscosity_0).evaluate() + ) + assert abs(got - exact) < 1e-8, (distribution, got) + + rocks["upper"].set(shear_viscosity_0=7.0) + exact = 1.0 * H + 7.0 * (1.0 - H) + for distribution in (regions, swarm): + got = float( + uw.maths.Integral(mesh, distribution.shear_viscosity_0).evaluate() + ) + assert abs(got - exact) < 1e-8, (distribution, got) + + +def test_a_registry_stands_alone_and_round_trips(): + """No mesh, no swarm: a material library is just definitions.""" + rocks = uw.MaterialRegistry() + rocks.add("mantle", shear_viscosity_0=1.0, density=3300, + description="upper mantle", reference="T&S (2014)") + rocks.add("slab", shear_viscosity_0=1.0e3, density=3400) + + assert rocks.list_materials() == ["mantle", "slab"] + assert rocks["mantle"].index == 0 and rocks["slab"].index == 1 + assert rocks.declared_properties() == {"shear_viscosity_0", "density"} + + config = rocks.export_config() + clone = uw.MaterialRegistry().import_config(config) + assert clone.list_materials() == rocks.list_materials() + assert clone["mantle"].description == "upper mantle" + assert float(clone["slab"].get_property("shear_viscosity_0")) == 1.0e3 + + # the enum spelling reaches the same place as the keyword + rocks["slab"].set_property(uw.MaterialProperty.DENSITY, 3500) + assert float(rocks["slab"].get_property("density")) == 3500 + + +def test_materials_must_be_declared_before_the_level_sets_are_built(): + mesh = _box(cell_size=0.25) + materials = uw.MaterialRegions(mesh, name="Rd") + materials.add("a", shear_viscosity_0=1.0) + materials["a"] = mesh.X[1] > H + materials._ensure_built() + with pytest.raises(RuntimeError, match="already built"): + materials.add("b", shear_viscosity_0=2.0) + + +def test_a_property_can_be_a_law_for_regions_too(): + mesh = _box(cell_size=0.2) + T = uw.discretisation.MeshVariable("Trl", mesh, 1, degree=1) + with uw.synchronised_array_update(): + T.data[:, 0] = np.asarray(T.coords)[:, 1] + + materials = uw.MaterialRegions(mesh, name="Rlaw") + materials.add("a", shear_viscosity_0=1.0) + materials.add("b", shear_viscosity_0=10 * sympy.exp(-T.sym[0])) + materials["b"] = mesh.X[1] > H + + exact = 0.5 + 10.0 * (np.exp(-0.5) - np.exp(-1.0)) + got = float(uw.maths.Integral(mesh, materials.shear_viscosity_0).evaluate()) + assert abs(got - exact) < 2e-3, got From b362632cfbf390ad76712a803ec2cfab1181e1e2 Mon Sep 17 00:00:00 2001 From: lmoresi Date: Thu, 10 Sep 2026 15:10:27 -0700 Subject: [PATCH 09/10] Review (#715): eleven materials defects, one of which killed the job Adversarial review of the new material API found nine confirmed defects plus two ergonomic traps. Every fix below has a regression test that reproduces the defect against the previous revision. **A mistyped label value segfaulted every rank.** getStratumIS() for a value outside a label's live set HARD-ABORTS PETSc -- no exception, no traceback -- and the guard `if stratum is not None` never fired because petsc4py returns a live IS wrapping a NULL handle. The API's own error message steered users straight in ("say which with materials[name] = (label, value)"), and on a UW3 box the only valid value is 99999, so every guess crashed. The repo documents this hazard twice, in its own words, and I had not looked. Now: probe getValueIS() first, guard on size, and destroy the IS (it was leaked). **Label values are rank-local.** A label live on one rank and absent on another raised on some ranks and not others -- a hang. Worse, a two-valued label looked single-valued to each rank separately, so a model that failed LOUDLY in serial silently painted the union of both zones at np=2. The value set is now reduced across ranks before anything branches on it: identical behaviour at np=1/2/3, and an explicit value gives the same area (0.3401) at every rank count. The rest, each confirmed and each now refused or fixed: - two distributions with the same explicit name silently SHARED their level sets, and painting the second changed the first one's answers; the only diagnostic was a print to stdout. Detected by counting what the mesh actually gained -- predicting the sanitised variable names is wrong, "M^{[0]}" becomes "M0". - delete_material / registry.add after a build re-pointed the blend at the wrong level sets, or produced a material with none (an IndexError swallowed into a warning while the solver kept a stale blend). The registry now refuses structural change once allocated. - hasattr(materials, prop) RAISED KeyError, breaking the contract for every caller, and hasattr also triggered the collective build. - a property sharing a name with a real attribute was silently unreachable, and the two distributions have different attributes, so a name that worked on one was shadowed on the other. Warned at add(). - m["x"] = A; m["x"] = B gave the UNION. Assignment now replaces. - harmonic mixing with a zero value folded to ComplexInfinity and died in the C printer naming neither material nor property; with a vanishing law it gave Integral = nan behind a RuntimeWarning. Refused, naming the material. - mixing() for an undeclared property was accepted silently -- the one place a typo could have been caught for free. - units were non-dimensionalised at add() time, so the same declaration meant numbers 28 orders of magnitude apart depending on whether the model's reference quantities were set yet. Resolved on READ instead, which is what lets a registry be written before the model. - solver.materials = None cleared the solver's reference but left the distribution pushing to it. check()'s message claimed a parameter "keeps its default value" when it was in fact being set from the materials that do declare it, and repeated on every rebuild. Fixed both; the similarity false positives on *_1/*_max/*_0 names are inherent to the threshold and remain. The documentation page raised if followed top to bottom -- stokes.materials = allocated the particles, so the SwarmVariable in the next block came too late. Reordered, and verified by running every block verbatim. The collective contract on the first read is now stated, with a public materials.build() to fix the ordering where it matters. Full level_1 and tier_a: 1230 passed. Material tests 43/43 at np=1 and np=2. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01MSGAFeA7qYXgkuw9ud8F2G --- .../particle-population-and-materials.md | 49 +++- .../cython/petsc_generic_snes_solvers.pyx | 3 + src/underworld3/materials.py | 257 ++++++++++++++++-- src/underworld3/swarm_materials.py | 11 + tests/test_0072_material_swarm.py | 11 + tests/test_0073_material_regions.py | 136 +++++++++ 6 files changed, 438 insertions(+), 29 deletions(-) diff --git a/docs/advanced/particle-population-and-materials.md b/docs/advanced/particle-population-and-materials.md index 50dde8c28..7561557ef 100644 --- a/docs/advanced/particle-population-and-materials.md +++ b/docs/advanced/particle-population-and-materials.md @@ -105,22 +105,59 @@ model script to use where it belongs. Properties can be changed and regions repainted afterwards: the blend is symbolic and the push repeats. A `MaterialSwarm` **is** a `Swarm`, so everything on the previous page still -applies to it: +applies to it. Declare any extra per-particle state **before** the materials +are first read, though — the first read allocates the particles, and a swarm +cannot gain variables once it holds them: ```python -materials.population_control = dict(min_per_cell=8) -materials.advection(v.sym, dt) +materials = uw.swarm.MaterialSwarm(mesh, fill_param=3) +materials.add("mantle", shear_viscosity_0=1.0) +materials.add("slab", shear_viscosity_0=1.0e3) strain = uw.swarm.SwarmVariable("eps", materials, 1, # per-particle state proxy_location="integration_points", proxy_sampling="share") + +materials["slab"] = mesh.X[1] > 0.53 # reads nothing yet +stokes.materials = materials # this allocates + +materials.population_control = dict(min_per_cell=8) +materials.advection(v.sym, dt) +``` + +```{warning} +Allocating the level sets is **collective**: every rank must reach it +together. It happens on the first *read* of any material property — +`materials.density`, `materials["x"].mask`, `materials.index`, or +`stokes.materials = ...` — so a read inside a rank-local branch +(`if rank == 0: ...`) deadlocks. Call `materials.build()` at a point where +every rank is together if the ordering is ever in doubt. ``` Regions can be a symbolic condition on the mesh coordinates (and `&`, `|`, `~` combinations of them), a boolean array over the particles, or a callable of the -coordinate array. Painting is ordered and cumulative — a later region -overwrites an earlier one where they overlap. `materials.add(..., where=...)` -is the same thing said in one line. +coordinate array. `materials.add(..., where=...)` is the same thing said in one +line. + +Assignment **replaces**: `materials["slab"] = A` followed by +`materials["slab"] = B` leaves the material at B, and anything it held outside +B reverts to the first material declared. Across *different* materials the +later assignment wins where they overlap. + +A few things are refused rather than half-done, because each of them used to +produce a plausible-looking wrong answer: + +| | | +|---|---| +| adding or deleting a material after the first read | the index of a material *is* which level set is its | +| two distributions sharing an explicit `name` on one mesh | they would share level sets, silently | +| `mixing(...)` naming a property no material declares | it would have no effect | +| harmonic mixing of a property some material sets to zero | `1/Σ(φᵢ/vᵢ)` divides by it | +| a mesh label value that does not exist | asking PETSc for it aborts the run | + +Dimensional values are non-dimensionalised when they are **read**, not when +they are declared, so a registry written before the model's reference +quantities are set means the same thing as one written after. ### What a material is, and where it is diff --git a/src/underworld3/cython/petsc_generic_snes_solvers.pyx b/src/underworld3/cython/petsc_generic_snes_solvers.pyx index 5c747d3e8..c7d53b68c 100644 --- a/src/underworld3/cython/petsc_generic_snes_solvers.pyx +++ b/src/underworld3/cython/petsc_generic_snes_solvers.pyx @@ -2761,7 +2761,10 @@ class SolverBaseClass(uw_object): @materials.setter def materials(self, material_swarm): if material_swarm is None: + previous = self._materials self._materials = None + if previous is not None: + previous._detach(self) # or it keeps pushing to this solver return if not hasattr(material_swarm, "_attach"): raise TypeError( diff --git a/src/underworld3/materials.py b/src/underworld3/materials.py index f13c6ffff..8aadc1c32 100644 --- a/src/underworld3/materials.py +++ b/src/underworld3/materials.py @@ -104,12 +104,21 @@ def _property_name(prop): def _as_symbolic(value, name, material): - """Coerce a declared property value into something sympy can carry.""" + """Coerce a declared property value into something sympy can carry. + + A dimensional quantity is non-dimensionalised HERE, so this is called when + the value is *read*, not when it is declared: the scaling is a property of + the model, and a registry is meant to be writable before the model exists. + Resolving at declaration time made the same declaration mean different + numbers depending on whether the reference quantities had been set yet. + """ if isinstance(value, sympy.Basic): return value try: return sympy.sympify(value) except (TypeError, ValueError, AttributeError): + # Not a plain number or expression. Fall through to the quantity path + # below, which raises with the offending value if that fails too. pass try: # a dimensional quantity return sympy.sympify(uw.scaling.non_dimensionalise(value)) @@ -151,13 +160,26 @@ def __init__(self, registry, name, index, properties=None, self.set(**properties) def set(self, **properties): - """Set or replace properties, and re-push them to attached solvers.""" + """Set or replace properties, and re-push them to attached solvers. + + The value is stored AS DECLARED. A dimensional quantity is + non-dimensionalised when it is read (see :meth:`resolved`), because + the scaling belongs to the model and a registry may be written before + there is one. + """ for key, value in properties.items(): key = _property_name(key) - self.properties[key] = _as_symbolic(value, key, self.name) + _as_symbolic(value, key, self.name) # validate now, resolve later + self.properties[key] = value self._registry._changed() return self + def resolved(self, prop): + """The property as sympy, non-dimensionalised against the model's + current scaling.""" + name = _property_name(prop) + return _as_symbolic(self.properties[name], name, self.name) + # -- the pre-2026 spelling, kept working ------------------------------ def set_property(self, prop, value): """Set one property. ``set(**{name: value})`` is the shorter form.""" @@ -195,6 +217,7 @@ def __init__(self, materials=None): self._materials: Dict[str, MaterialDefinition] = {} self._order: List[str] = [] self._callbacks = [] + self._built = [] # distributions that have built their level sets self._version = 0 if materials: for name, properties in dict(materials).items(): @@ -219,6 +242,7 @@ def add(self, name, description="", reference="", **properties): ------- MaterialDefinition """ + self._refuse_if_built(f"declare material {name!r}") if name in self._materials: raise ValueError(f"material {name!r} has already been declared") material = MaterialDefinition( @@ -247,8 +271,11 @@ def delete_material(self, name): index of a material IS which level set is its, so removing one renumbers the others. """ + self._refuse_if_built(f"delete material {name!r}") if name not in self._materials: - return + raise KeyError( + f"no material {name!r}; declared: {self.list_materials()}" + ) del self._materials[name] self._order.remove(name) for i, key in enumerate(self._order): @@ -291,6 +318,24 @@ def __repr__(self): # -- change notification ---------------------------------------------- + def _refuse_if_built(self, what): + """A material's index IS which level set is its, so the set of + materials cannot change once a distribution has allocated them. + + Without this, ``registry.add`` after a build produced a material with + no level set (an ``IndexError`` from ``blend``, swallowed into a + warning by the change callback, leaving the solver holding a stale + blend), and ``delete_material`` silently re-pointed every later + material at its neighbour's level set. + """ + if self._built: + names = ", ".join(sorted(type(d).__name__ for d in self._built)) + raise RuntimeError( + f"cannot {what}: this registry is already in use by {names}, " + "whose level sets are allocated one per material. Declare " + "every material before the first read." + ) + def add_callback(self, callback): """Register ``callback()`` to run whenever a definition changes.""" self._callbacks.append(callback) @@ -402,6 +447,29 @@ class MaterialDistribution: #: mesh do not collide over their level-set variable names. _default_name_count = 0 + def _check_level_sets_are_new(self, mesh, before, count): + """Refuse a name whose level sets already existed on this mesh. + + Two distributions sharing a name silently shared their level sets: + creating the second one's variables printed "Variable ... already + exists - Skipping" to stdout and handed back the FIRST distribution's + variables, so painting the second changed the first one's answers with + no error anywhere. The default names are counter-suffixed to avoid + this; an explicit ``name=`` was unguarded. + + Checked by counting what the mesh actually gained rather than by + predicting the sanitised variable names, which are not the strings + passed in — ``"M^{[0]}"`` becomes ``"M0"``. + """ + gained = len(mesh.vars) - before + if gained != count: + raise ValueError( + f"name={self._distribution_name!r} is already in use on this " + f"mesh: {count} level sets were requested and {gained} were " + "created, so this distribution would share another's storage. " + "Give it a different name." + ) + def _init_distribution(self, registry=None, name=None): self._registry = registry if registry is not None else MaterialRegistry() if name is None: @@ -412,6 +480,7 @@ def _init_distribution(self, registry=None, name=None): self._solvers = [] self._mixing_rules = {} self._read_properties = set() + self._reported = set() # check() speaks once per finding self._registry.add_callback(self._push_all) # -- declaring (shorthand onto the registry) -------------------------- @@ -426,6 +495,27 @@ def materials(self): """The declared materials, in order, bound to this distribution.""" return tuple(BoundMaterial(self, m) for m in self._registry.materials) + def _warn_on_shadowed_properties(self, properties): + """A property whose name is also an attribute of this object is + unreachable as ``materials.`` — normal lookup wins and returns + the attribute, silently, with no blend in sight. The two + distributions have different attributes, so a name that works on one + can be shadowed on the other.""" + # NB not hasattr(self, n): that goes through __getattr__, which + # resolves a property by BUILDING the level sets, mid-add(). + own = set(vars(self)) + for klass in type(self).__mro__: + own |= set(vars(klass)) + shadowed = sorted(n for n in properties if n in own) + if shadowed: + warnings.warn( + f"material properties {shadowed} share a name with an " + f"attribute of {type(self).__name__}, so materials. will " + "return the attribute, not the blend. Read them with " + "materials.blend(name) instead, or rename them.", + stacklevel=3, + ) + def add(self, name, where=None, description="", reference="", **properties): """Declare a material here — shorthand for ``registry.add(...)``. @@ -434,6 +524,7 @@ def add(self, name, where=None, description="", reference="", **properties): as assigning a region afterwards. """ self._check_can_declare(name) + self._warn_on_shadowed_properties(properties) self._registry.add(name, description=description, reference=reference, **properties) bound = self[name] @@ -452,6 +543,20 @@ def __len__(self): # -- level sets (subclass) -------------------------------------------- + def build(self): + """Allocate the level sets now, rather than on first read. + + **Collective**: it creates mesh variables, so every rank must call it + together. That is also true of the first *read* of any material + property — ``materials.density``, ``materials["x"].mask``, + ``materials.index``, or ``solver.materials = ...`` — because the read + builds them. Putting such a read inside a rank-local branch + (``if rank == 0: ...``) deadlocks. Call this at a point where every + rank is together if the ordering is ever in doubt. + """ + self._ensure_built() + return self + def _ensure_built(self): raise NotImplementedError @@ -477,6 +582,7 @@ def mixing(self, **rules): converge with sampling density. ``"harmonic"`` is the Reuss average, which does. Pick on physical grounds. """ + declared = self._registry.declared_properties() for name, rule in rules.items(): name = _property_name(name) if rule not in _MIXING_RULES: @@ -484,6 +590,11 @@ def mixing(self, **rules): f"mixing rule for {name!r} must be one of {_MIXING_RULES}, " f"not {rule!r}" ) + if name not in declared: + raise KeyError( + f"no material declares {name!r}, so a mixing rule for it " + f"would have no effect; declared: {sorted(declared)}" + ) self._mixing_rules[name] = rule self._push_all() return self @@ -506,12 +617,30 @@ def blend(self, name, mixing=None): self._ensure_built() self._read_properties.add(name) - values = [m.properties[name] for m in self._registry.materials] + values = [m.resolved(name) for m in self._registry.materials] masks = self._level_sets() rule = mixing or self._mixing_rules.get(name, "arithmetic") if rule == "arithmetic": return sum(masks[i].sym[0] * value for i, value in enumerate(values)) + + # A harmonic blend is 1 / sum(phi_i / v_i), so a material whose value + # is zero poisons the symbol at declaration time: sympy folds 1/0 to + # ComplexInfinity and the JIT then dies with a bare C-printer + # traceback naming neither the material nor the property. A value that + # can VANISH (a law in T, say) is the same defect deferred to run + # time, where it surfaces as Integral = nan behind a RuntimeWarning. + zeros = [ + m.name for m, value in zip(self._registry.materials, values) + if value.is_zero + ] + if zeros: + raise ValueError( + f"harmonic mixing of {name!r} divides by its value in " + f"{zeros}, which is zero. A material with no {name} cannot be " + "blended harmonically; use arithmetic mixing, or give it a " + "small non-zero value." + ) return 1 / sum(masks[i].sym[0] / value for i, value in enumerate(values)) def __getattr__(self, name): @@ -528,7 +657,13 @@ def __getattr__(self, name): f"{type(self).__name__!r} object has no attribute {name!r}, and " "no material declares a property of that name" ) - return self.blend(name) + try: + return self.blend(name) + except KeyError as exc: + # hasattr() swallows AttributeError and nothing else, so a KeyError + # escaping here breaks hasattr / getattr(o, n, default) for every + # caller. Keep the diagnosis, honour the contract. + raise AttributeError(str(exc.args[0] if exc.args else exc)) from None # -- the handoff to a solver ------------------------------------------ @@ -538,6 +673,10 @@ def _attach(self, solver): self._solvers.append(solver) self._push_to(solver) + def _detach(self, solver): + """Stop pushing to a solver that no longer wants these materials.""" + self._solvers = [s for s in self._solvers if s is not solver] + def _push_all(self): for solver in self._solvers: self._push_to(solver) @@ -598,11 +737,20 @@ def check(self): if close: suspicious.append((name, close[0])) for name, suggestion in suspicious: + if (name, suggestion) in self._reported: + continue # a nonlinear solve rebuilds repeatedly + self._reported.add((name, suggestion)) + declared = self._registry.declared_properties() + fate = ( + f"{suggestion!r} is set from the materials that DO declare it" + if suggestion in declared + else f"{suggestion!r} keeps its default value" + ) warnings.warn( - f"material property {name!r} is declared but unused, and the " - f"constitutive model has a parameter {suggestion!r} — did you " - f"mean that? As it stands {suggestion!r} keeps its default " - f"value and nothing reads {name!r}.", + f"material property {name!r} is declared but nothing reads it, " + f"and the constitutive model has a similarly-named parameter " + f"{suggestion!r} — did you mean that? As it stands {fate}, and " + f"nothing reads {name!r}.", stacklevel=3, ) return suspicious @@ -677,12 +825,16 @@ def _ensure_built(self): "no materials have been declared — call add() before reading " "a material property" ) + _vars_before = len(self.mesh.vars) self._level_set_vars = [ uw.discretisation.IntegrationPointVariable( f"{self._distribution_name}^{{[{i}]}}", self.mesh, ) for i in range(len(self._registry)) ] + self._check_level_sets_are_new( + self.mesh, _vars_before, len(self._registry)) + self._registry._built.append(self) # material 0 owns everything not claimed by anyone else self._level_set_vars[0].data[...] = 1.0 for i in range(1, len(self._level_set_vars)): @@ -719,10 +871,22 @@ def __setitem__(self, name, region): self._paint(definition, region) def _paint(self, definition, region): + """Give ``definition`` exactly ``region``, and nothing else. + + Assignment replaces: ``materials["x"] = A`` then ``materials["x"] = B`` + leaves the material at B, not at A union B. Anything this material + held outside the new region reverts to material 0, which is what + ``x[k] = v`` means in Python and what a user correcting a region in a + notebook cell expects. + """ selected = self._region_mask(region) + held = np.asarray(self._level_set_vars[definition.index].data).reshape(-1) > 0.5 + released = held & ~selected for i, var in enumerate(self._level_set_vars): values = np.asarray(var.data).reshape(-1).copy() values[selected] = 1.0 if i == definition.index else 0.0 + if released.any(): # back to the default material + values[released] = 1.0 if i == 0 else 0.0 var.data[:, 0] = values def _integration_points(self): @@ -761,7 +925,24 @@ def _region_mask(self, region): ) def _label_mask(self, label_name, label_value, ncells, nq): - """Integration points of the cells carried by a mesh label.""" + """Integration points of the cells carried by a mesh label. + + Two PETSc hazards govern the shape of this method. + + ``getStratumIS(v)`` for a value that is not in the label's live value + set **hard-aborts** the process — no exception, no traceback, every + rank gone (the repo warns about this twice; cf. the "Centre" + pseudo-label). And on a rank where the stratum is empty, petsc4py + returns a live ``IS`` wrapping a NULL handle rather than ``None``, so + ``getIndices()`` on it segfaults too. Both are probed for below. + + The value set is also **rank-local**: a label live on one rank can be + absent on another, and a label with two values can look single-valued + to each rank separately. Resolving the value from the local set would + raise on some ranks and not others (a hang), or silently paint the + union of two regions. The set is therefore reduced across ranks + before anything branches on it. + """ dm = self.mesh.dm if not dm.hasLabel(label_name): available = [dm.getLabelName(i) for i in range(dm.getNumLabels())] @@ -772,25 +953,55 @@ def _label_mask(self, label_name, label_value, ncells, nq): f"the mesh has no label {label_name!r}. Available: " f"{sorted(set(available))}" ) + + label = dm.getLabel(label_name) + values_is = label.getValueIS() + local_values = ( + {int(v) for v in values_is.getIndices()} if values_is is not None else set() + ) + + # Reduce first, then branch: every rank must resolve the same value + # and raise the same errors. + global_values = set() + for rank_values in uw.mpi.comm.allgather(local_values): + global_values |= rank_values + if label_value is None: regions = getattr(self.mesh, "regions", None) if regions is not None and label_name in regions.__members__: - label_value = regions[label_name].value + label_value = int(regions[label_name].value) + elif len(global_values) == 1: + label_value = int(next(iter(global_values))) else: - values = dm.getLabelIdIS(label_name).getIndices() - if len(values) != 1: - raise ValueError( - f"label {label_name!r} carries values {list(values)}; " - "say which with materials[name] = (label, value)" - ) - label_value = int(values[0]) + raise ValueError( + f"label {label_name!r} carries values " + f"{sorted(global_values)}; say which with " + f"materials[name] = ({label_name!r}, value)" + ) - c_start, c_end = dm.getHeightStratum(0) - stratum = dm.getStratumIS(label_name, label_value) - cells = np.asarray(stratum.getIndices()) if stratum is not None else np.zeros(0, int) - cells = cells[(cells >= c_start) & (cells < c_end)] - c_start + label_value = int(label_value) + if label_value not in global_values: + raise ValueError( + f"label {label_name!r} has no stratum with value {label_value} " + f"anywhere on the mesh (live values: {sorted(global_values)}). " + "Asking PETSc for it would abort the run." + ) selected = np.zeros((ncells, nq), dtype=bool) + if label_value not in local_values: + return selected.reshape(-1) # live elsewhere, no cells here + + stratum = label.getStratumIS(label_value) + try: + if stratum is None or stratum.getSize() == 0: + return selected.reshape(-1) + cells = np.asarray(stratum.getIndices()) + finally: + if stratum is not None: + stratum.destroy() + + c_start, c_end = dm.getHeightStratum(0) + cells = cells[(cells >= c_start) & (cells < c_end)] - c_start selected[cells] = True return selected.reshape(-1) diff --git a/src/underworld3/swarm_materials.py b/src/underworld3/swarm_materials.py index 1b224b60c..d8fcf0c18 100644 --- a/src/underworld3/swarm_materials.py +++ b/src/underworld3/swarm_materials.py @@ -167,6 +167,7 @@ def _ensure_built(self): "a material property" ) + _vars_before = len(self.mesh.vars) self._index_var = IndexSwarmVariable( self._distribution_name, self, @@ -182,6 +183,10 @@ def _ensure_built(self): if self.local_size <= 0: Swarm.populate(self, fill_param=self._material_fill_param) + self._check_level_sets_are_new( + self.mesh, _vars_before, len(self._registry)) + self._registry._built.append(self) + pending, self._material_pending = self._material_pending, [] for definition, region in pending: self._paint(definition, region) @@ -209,9 +214,15 @@ def __setitem__(self, name, region): self._paint(definition, region) def _paint(self, definition, region): + """Give ``definition`` exactly ``region``, and nothing else — see + ``MaterialRegions._paint``; assignment replaces rather than unions.""" selected = self._region_mask(region) + labels = np.asarray(self._index_var.data).reshape(-1) + released = (labels == definition.index) & ~selected with uw.synchronised_array_update(): self._index_var.data[selected, 0] = definition.index + if released.any(): + self._index_var.data[released, 0] = 0 def _region_mask(self, region): """A boolean array over the particles.""" diff --git a/tests/test_0072_material_swarm.py b/tests/test_0072_material_swarm.py index edb7c8e11..8c3255991 100644 --- a/tests/test_0072_material_swarm.py +++ b/tests/test_0072_material_swarm.py @@ -161,13 +161,24 @@ def test_a_property_nothing_uses_is_reported(): def test_a_property_missing_from_one_material_is_an_error(): + """Two surfaces, two exception types on purpose. ``blend`` raises KeyError + naming the materials that are missing the property; attribute access + converts that to AttributeError, because hasattr() swallows AttributeError + and nothing else -- a KeyError escaping __getattr__ breaks hasattr() and + getattr(o, n, default) for every caller.""" mesh = _box(cell_size=0.25) materials = uw.swarm.MaterialSwarm(mesh, fill_param=2, name="Mm") materials.add("a", shear_viscosity_0=1.0, density=3300) materials.add("b", shear_viscosity_0=2.0) # no density + with pytest.raises(KeyError, match="density"): + materials.blend("density") + + with pytest.raises(AttributeError, match="density"): materials.density + assert hasattr(materials, "density") is False + def test_materials_must_be_declared_before_the_swarm_is_populated(): mesh = _box(cell_size=0.25) diff --git a/tests/test_0073_material_regions.py b/tests/test_0073_material_regions.py index 54d36d500..6881c91a6 100644 --- a/tests/test_0073_material_regions.py +++ b/tests/test_0073_material_regions.py @@ -174,3 +174,139 @@ def test_a_property_can_be_a_law_for_regions_too(): exact = 0.5 + 10.0 * (np.exp(-0.5) - np.exp(-1.0)) got = float(uw.maths.Integral(mesh, materials.shear_viscosity_0).evaluate()) assert abs(got - exact) < 2e-3, got + + +# --------------------------------------------------------------------------- +# Adversarial review, 2026-09-10. Every test below reproduces a defect that +# was confirmed against the previous revision. +# --------------------------------------------------------------------------- + + +def test_a_label_value_that_does_not_exist_is_refused_not_dereferenced(): + """PETSc HARD-ABORTS on getStratumIS() for a value outside a label's live + set -- no exception, no traceback, every rank gone. The API's own error + message steered users straight into it ("say which with (label, value)"), + and on a UW3 box the only valid value is 99999, so every guess crashed.""" + mesh = _box(cell_size=0.25) + materials = uw.MaterialRegions(mesh, name="Lv") + materials.add("a", shear_viscosity_0=1.0) + materials.add("b", shear_viscosity_0=2.0) + materials["b"] = ("Elements", 1) # not the live value + + with pytest.raises(ValueError, match="no stratum with value"): + materials.build() + + # the real value still selects the cells + good = uw.MaterialRegions(mesh, name="Lv2") + good.add("a", shear_viscosity_0=1.0) + good.add("b", shear_viscosity_0=2.0) + live = int(mesh.dm.getLabelIdIS("Elements").getIndices()[0]) + good["b"] = ("Elements", live) + assert abs(float(uw.maths.Integral(mesh, good.shear_viscosity_0).evaluate()) + - 2.0) < 1e-9 + + +def test_assigning_a_region_replaces_the_previous_one(): + """``m["x"] = A`` then ``m["x"] = B`` used to leave the material at + A union B -- not what ``=`` means, and a trap for anyone correcting a + region in a notebook cell.""" + mesh = _box(cell_size=0.2) + materials = uw.MaterialRegions(mesh, name="Rp2") + materials.add("bg", rho=1.0) + materials.add("x", rho=2.0) + + materials["x"] = mesh.X[1] > 0.3 + materials["x"] = mesh.X[1] > 0.6 + got = float(uw.maths.Integral(mesh, materials.rho).evaluate()) + assert abs(got - 1.4) < 0.05, f"{got} looks like the union (1.7)" + + +def test_hasattr_does_not_raise_and_does_not_build(): + """``blend`` raises KeyError for a partly-declared property, and + ``__getattr__`` used to let it out -- breaking hasattr() for every caller. + hasattr must also not trigger the (collective) level-set build.""" + mesh = _box(cell_size=0.25) + materials = uw.MaterialRegions(mesh, name="Ha") + materials.add("a", rho=1.0) + materials.add("b", rho=2.0, sigma=3.0) # only b declares sigma + + assert hasattr(materials, "sigma") is False + assert hasattr(materials, "not_a_property") is False + assert materials._level_set_vars is None, "hasattr built the level sets" + + +def test_two_distributions_cannot_share_a_name(): + """They shared their level sets silently: the second one's variables were + skipped, it was handed the first one's, and painting it changed the FIRST + one's answers. The only diagnostic was a print to stdout.""" + mesh = _box(cell_size=0.25) + first = uw.MaterialRegions(mesh, name="Same") + first.add("a", rho=1.0) + first.add("b", rho=2.0) + first["b"] = mesh.X[1] > 0.5 + first.build() + + second = uw.MaterialRegions(mesh, name="Same") + second.add("a", rho=1.0) + second.add("b", rho=2.0) + with pytest.raises(ValueError, match="already in use"): + second.build() + + +def test_the_registry_is_frozen_once_a_distribution_is_built(): + """A material's index IS which level set is its, so adding or deleting one + after allocation re-points the blend. ``registry.add`` bypassed the + distribution's own guard entirely, and the resulting IndexError was + swallowed into a warning while the solver kept a stale blend.""" + mesh = _box(cell_size=0.25) + materials = uw.MaterialRegions(mesh, name="Fz") + materials.add("a", rho=1.0) + materials.add("b", rho=2.0) + materials["b"] = mesh.X[1] > 0.5 + materials.build() + + with pytest.raises(RuntimeError, match="already in use"): + materials.registry.add("late", rho=9.0) + with pytest.raises(RuntimeError, match="already in use"): + materials.registry.delete_material("a") + + +def test_harmonic_mixing_will_not_divide_by_a_material_with_no_value(): + """1 / sum(phi_i / v_i) with v_i == 0 folds to ComplexInfinity at + declaration time and the JIT then dies with a bare C-printer traceback + naming neither the material nor the property. An air layer with + density=0 is the obvious way in.""" + mesh = _box(cell_size=0.25) + materials = uw.MaterialRegions(mesh, name="Hz") + materials.add("air", eta=0.0) + materials.add("rock", eta=1.0) + materials["rock"] = mesh.X[1] < 0.5 + materials.mixing(eta="harmonic") + + with pytest.raises(ValueError, match="divides by its value"): + materials.eta + + # a mixing rule for a property nobody declares is a typo, not a no-op + with pytest.raises(KeyError, match="no material declares"): + materials.mixing(viscocity="harmonic") + + +def test_a_quantity_means_the_same_whenever_it_was_declared(): + """Units were non-dimensionalised at add() time, so the same declaration + gave different numbers depending on whether the model's reference + quantities had been set yet -- 28 orders of magnitude apart, no warning. + A registry is meant to be writable before the model exists.""" + rocks = uw.MaterialRegistry() + rocks.add("early", shear_viscosity_0=uw.quantity(1.0e21, "Pa*s")) + + model = uw.get_default_model() + model.set_reference_quantities( + length=uw.quantity(1.0e6, "m"), + viscosity=uw.quantity(1.0e21, "Pa*s"), + time=uw.quantity(1.0e15, "s"), + ) + rocks.add("late", shear_viscosity_0=uw.quantity(1.0e21, "Pa*s")) + + early = float(rocks["early"].resolved("shear_viscosity_0")) + late = float(rocks["late"].resolved("shear_viscosity_0")) + assert early == late, (early, late) From 81a3afe7cc05d06085c64fb54078add01f185d07 Mon Sep 17 00:00:00 2001 From: lmoresi Date: Thu, 10 Sep 2026 15:18:33 -0700 Subject: [PATCH 10/10] Charter: rename `model`, use .array in new code, rebuild both examples Style-charter findings from the adversarial review. Section 3 bans naming a variable `model` (it is ambiguous between uw.Model and a constitutive model); materials.py did it twice, in the two places where it IS the constitutive model. Section 7: new code uses `.array` with the three-index shapes, and flat `.data` has exactly one sanctioned exception. The nine uses in the new library source were none of them that exception; converted. Section 11 and section 1: both new examples were written on `os.environ` for options, `np.savez` for output, bare per-rank `print`, `mesh.dm` calls, and private reads (`swarm._particle_coordinates`, `mesh._robust_owning_cells`) -- and the material-index one documented the environment-variable idiom as the way to run it. Both are rebuilt on uw.Params (with -uw_name CLI overrides), uw.pprint, and public API only. Their diagnostics are now GLOBAL integrals rather than rank-local norms and censuses, so they run and report correctly on more than one rank: verified identical at np=1 and np=2. The population-control example changed substance, not just style. Its old claim rested on a particle scatter plot. Measuring instead what the field actually does, on the layer's own area against the exact e^-t thinning: proxy_location population control layer area vs exact cells on 1.03x cells off 5.03x integration_points on 1.06x integration_points off 1.07x Three diagnostics I tried first did NOT discriminate between control on and off, because the nearest-particle mapping degrades gracefully -- an empty cell still finds a plausible particle. Starvation wrecks the per-cell fit, which needs particles IN that cell, and that is the case the example now shows. The docs page carries the table too, since it previously asserted the effect without a field-level number. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01MSGAFeA7qYXgkuw9ud8F2G --- .../particle-population-and-materials.md | 21 +++ .../intermediate/Ex_Swarm_Material_Index.py | 110 ++++++----- .../Ex_Swarm_Population_Control.py | 176 +++++++++++------- src/underworld3/materials.py | 24 +-- src/underworld3/swarm_materials.py | 6 +- 5 files changed, 206 insertions(+), 131 deletions(-) diff --git a/docs/advanced/particle-population-and-materials.md b/docs/advanced/particle-population-and-materials.md index 7561557ef..2cdf5d2a2 100644 --- a/docs/advanced/particle-population-and-materials.md +++ b/docs/advanced/particle-population-and-materials.md @@ -80,6 +80,27 @@ not fighting the outflow, which is physical and correct; it is refilling the inflow side, where the flow brings nothing. ``` +### What it is worth, in a number + +The figures above are particle scatters. The field-level cost depends on how +the material is read, and it is worth knowing which case needs the refilling. +Pure shear thins a marker layer by $e^{-t}$, so after $t = 2$ its area should +be 13.5% of where it started; anything else is the representation failing: + +| `proxy_location` | population control | layer area vs exact | +|---|---|---| +| `"cells"` | on | 1.03x | +| `"cells"` | off | **5.03x** | +| `"integration_points"` | on | 1.06x | +| `"integration_points"` | off | 1.07x | + +Starvation wrecks the per-cell fit, which needs particles *in that cell*. The +nearest-particle mapping degrades gracefully — an empty cell still finds a +plausible particle nearby — so with the default mapping the field-level answer +barely moves, and losing particles shows up only in the swarm's own +bookkeeping. Population control is cheap and always safe; `"cells"` is where +it is *necessary*. + ## Materials Name the materials, say where they are, and stop. diff --git a/docs/examples/utilities/intermediate/Ex_Swarm_Material_Index.py b/docs/examples/utilities/intermediate/Ex_Swarm_Material_Index.py index d50f75788..49dd2fb3c 100644 --- a/docs/examples/utilities/intermediate/Ex_Swarm_Material_Index.py +++ b/docs/examples/utilities/intermediate/Ex_Swarm_Material_Index.py @@ -23,34 +23,35 @@ ## Description Two viscosity layers, 1 and 1000, carried by particles and driven from the -top. The model names its materials and says where they are; it never -writes a level set, a mask, or a blend. +top. The model names its materials and says where they are; it never writes +a level set, a mask, or a blend. With the interface on mesh edges the exact velocity is piecewise linear and lies in the P2 velocity space, so the only error in the solve is how the -material is represented. Read at the integration points (the default), -where each point takes the material of its nearest particle, the problem -solves to 2e-7. Run with `PROXY=nodes` to see the nodal level set smear the -interface across a cell and leave an L2 velocity error of 8e-2. +material is represented. Read at the integration points (the default), where +each point takes the material of its nearest particle, the problem solves to +2e-7. Run with `-uw_proxy_location nodes` to watch the nodal level set smear +the interface across a cell and leave an L2 error of 8e-2. """ # %% -import os - import numpy as np import sympy import underworld3 as uw -PROXY = os.environ.get("PROXY", "integration_points") -SAMPLING = os.environ.get("SAMPLING", "nearest") -CELL = float(os.environ.get("CELL", "0.1")) -ETA_TOP = float(os.environ.get("ETA_TOP", "1000")) -H = float(os.environ.get("H", "0.5")) -FILL = int(os.environ.get("FILL", "3")) -OUT = os.environ.get("OUT", "runs") +params = uw.Params( + uw_proxy_location="integration_points", # or "nodes", or "cells" + uw_proxy_sampling="nearest", # or "share" + uw_cell_size=0.1, + uw_eta_top=1000.0, + uw_interface=0.5, + uw_fill_param=3, +) -mesh = uw.meshing.UnstructuredSimplexBox(cellSize=CELL, qdegree=2, regular=True) +mesh = uw.meshing.UnstructuredSimplexBox( + cellSize=params.uw_cell_size, qdegree=2, regular=True +) v = uw.discretisation.MeshVariable("v", mesh, mesh.dim, degree=2) p = uw.discretisation.MeshVariable("p", mesh, 1, degree=1) @@ -59,21 +60,27 @@ ## The materials `MaterialSwarm` is a `Swarm` that carries materials. Declare them with the -property names the constitutive model knows, then paint the regions: a +property names the constitutive model knows, then say where each one is: a symbolic condition on the mesh coordinates, a boolean array over the -particles, or a callable. The swarm is populated the first time anything -reads it, so every `add` can come first. +particles, or a callable. Every `add` must come before the first read, which +is what allocates the particles and the level sets. """ # %% materials = uw.swarm.MaterialSwarm( - mesh, fill_param=FILL, proxy_location=PROXY, - proxy_sampling=SAMPLING if PROXY == "integration_points" else None, + mesh, + fill_param=params.uw_fill_param, + proxy_location=params.uw_proxy_location, + proxy_sampling=( + params.uw_proxy_sampling + if params.uw_proxy_location == "integration_points" + else None + ), ) materials.add("lower", shear_viscosity_0=1.0, density=3300) -materials.add("upper", shear_viscosity_0=ETA_TOP, density=3400) +materials.add("upper", shear_viscosity_0=params.uw_eta_top, density=3400) -materials["upper"] = mesh.X[1] > H +materials["upper"] = mesh.X[1] > params.uw_interface # %% [markdown] """ @@ -100,30 +107,43 @@ # %% [markdown] """ ## Against the exact layered Couette profile + +The error is a global integral rather than a nodal norm, so the number is the +same however the mesh is partitioned. """ # %% -A = 1.0 / (H + (1.0 - H) / ETA_TOP) -Xv = np.asarray(v.coords) -vx_exact = np.where(Xv[:, 1] < H, A * Xv[:, 1], - A * H + A / ETA_TOP * (Xv[:, 1] - H)) -err = np.abs(np.asarray(v.data[:, 0]) - vx_exact) - -viscosity = materials.shear_viscosity_0 -assembled = float(uw.maths.Integral(mesh, viscosity).evaluate()) -exact_int = 1.0 * H + ETA_TOP * (1.0 - H) - -# the material as the weak form sees it, across the interface -ys = np.linspace(max(0.0, H - 0.25), min(1.0, H + 0.25), 201) -line = np.c_[np.full_like(ys, 0.5), ys] -upper = np.asarray(uw.function.evaluate(materials["upper"].mask, line)).reshape(-1) +h, eta_top = params.uw_interface, params.uw_eta_top +gradient = 1.0 / (h + (1.0 - h) / eta_top) +y = mesh.X[1] +exact = sympy.Piecewise( + (gradient * y, y < h), + (gradient * h + gradient / eta_top * (y - h), True), +) + +error = uw.maths.Integral(mesh, (v.sym[0] - exact) ** 2).evaluate() ** 0.5 +viscosity = uw.maths.Integral(mesh, materials.shear_viscosity_0).evaluate() +exact_viscosity = 1.0 * h + eta_top * (1.0 - h) + +uw.pprint( + f"proxy_location={params.uw_proxy_location} " + f"sampling={params.uw_proxy_sampling} fill={params.uw_fill_param}: " + f"assembled int(eta) {viscosity:.4f} (exact {exact_viscosity:.4f}) | " + f"velocity L2 {error:.3e}" +) + +# %% [markdown] +""" +## What the weak form sees -os.makedirs(OUT, exist_ok=True) -np.savez(f"{OUT}/matindex_{PROXY}.npz", ys=ys, upper=upper, vy=Xv[:, 1], - vx=np.asarray(v.data[:, 0]), vx_exact=vx_exact, - l2=np.sqrt(np.mean(err ** 2)), linf=err.max(), assembled=assembled) +The upper-material mask along a line crossing the interface. At the +integration points it is a step in the right place; the nodal level set ramps +across a whole cell. +""" -print(f"RESULT proxy={PROXY} sampling={SAMPLING} fill={FILL}: " - f"assembled int(eta) {assembled:.4f} (exact {exact_int:.4f}) | " - f"vx L2 {np.sqrt(np.mean(err**2)):.3e} Linf {err.max():.3e} | " - f"mask range {upper.min():+.4f}..{upper.max():+.4f}", flush=True) +# %% +line = np.column_stack( + [np.full(201, 0.5), np.linspace(max(0.0, h - 0.25), min(1.0, h + 0.25), 201)] +) +upper = np.asarray(uw.function.evaluate(materials["upper"].mask, line)).reshape(-1) +uw.pprint(f"mask along the line: {upper.min():+.4f} .. {upper.max():+.4f}") diff --git a/docs/examples/utilities/intermediate/Ex_Swarm_Population_Control.py b/docs/examples/utilities/intermediate/Ex_Swarm_Population_Control.py index 179f2286a..2cdbeba41 100644 --- a/docs/examples/utilities/intermediate/Ex_Swarm_Population_Control.py +++ b/docs/examples/utilities/intermediate/Ex_Swarm_Population_Control.py @@ -14,94 +14,128 @@ # %% [markdown] """ -# Swarm population control in an extending box +# Population control in an extending box -**PHYSICS:** utilities +**PHYSICS:** fluid_mechanics **DIFFICULTY:** intermediate **PURPOSE:** demonstration ## Description -Pure-shear extension `v = (x, -y)` on a fixed mesh: the side walls are -outflow and the top and bottom are inflow. Nothing enters through an -inflow boundary unless we put it there, so the cells along the top and -bottom starve and the marker layer they carry breaks up. +Pure-shear extension $\\mathbf{v} = (x, -y)$ on a fixed mesh. The side walls +are outflow and the top and bottom are inflow, and nothing arrives through an +inflow boundary unless you put it there — so the cells along the top and +bottom starve. -Setting `swarm.population_control` refills the starved cells at the end -of every `advection()`. Run it with `POPCTL=0` and `POPCTL=1` and -compare: without control the box drains to 13% of its particles and -most cells are empty; with control no cell is ever empty. +What that costs depends on how the material is read. This example measures it +on the area of a marker layer, a global integral of the layer's own material +mask, so the number is the same however the mesh is partitioned. -The velocity is prescribed, so what this measures is the swarm -machinery alone, with no solve in the way. +Incompressible pure shear thins the layer by $e^{-t}$, so after $t = 2$ the +area should be $e^{-2} = 13.5\\%$ of where it started. Anything else is the +material representation failing, not physics. + +Run with `-uw_population_control 0` to switch the refilling off, and with +`-uw_proxy_location integration_points` to see how much the choice of +mapping matters. """ # %% -import os +import math -import numpy as np import sympy import underworld3 as uw -POPCTL = os.environ.get("POPCTL", "1") == "1" -CELL = float(os.environ.get("CELL", "0.08")) -STEPS = int(os.environ.get("STEPS", "40")) -DT = float(os.environ.get("DT", "0.05")) -FILL = int(os.environ.get("FILL", "3")) -OUT = os.environ.get("OUT", "runs") +params = uw.Params( + uw_population_control=1, + uw_proxy_location="cells", # or "integration_points" + uw_cell_size=0.08, + uw_steps=40, + uw_dt=0.05, + uw_fill_param=3, + uw_min_per_cell=6, +) mesh = uw.meshing.UnstructuredSimplexBox( - minCoords=(-1.0, -0.5), maxCoords=(1.0, 0.5), cellSize=CELL, qdegree=2 + minCoords=(-1.0, -0.5), maxCoords=(1.0, 0.5), + cellSize=params.uw_cell_size, qdegree=2, ) x, y = mesh.X -V = sympy.Matrix([[x, -y]]) # incompressible pure shear -mesh.return_coords_to_bounds = None # a true outflow: particles leave - -swarm = uw.swarm.Swarm(mesh) -M = uw.swarm.IndexSwarmVariable("M", swarm, indices=2, proxy_degree=1, - proxy_location="integration_points") -swarm.populate(fill_param=FILL) -X0 = np.asarray(swarm._particle_coordinates.data) -with uw.synchronised_array_update(): - M.data[:, 0] = (np.abs(X0[:, 1]) < 0.2).astype(int) # a central layer - -if POPCTL: - # Refill starved cells. A new particle takes the material of its nearest - # neighbour: repopulate() does that for any INTEGER variable without being - # asked, because the average of two material labels is not a label. - swarm.population_control = dict(min_per_cell=6) - -c0, c1 = mesh.dm.getHeightStratum(0) -ncells = c1 - c0 - - -def census(): - P = np.asarray(swarm._particle_coordinates.data) - cells = np.asarray(mesh._robust_owning_cells(P)) - return np.bincount(cells[cells >= 0], minlength=ncells) - - -hist = [] -frames = {} -for step in range(STEPS + 1): - n = census() - hist.append((step * DT, swarm.local_size, int((n == 0).sum()), int((n < 6).sum()), int(n.min()))) - if step in (0, STEPS // 2, STEPS): - P = np.asarray(swarm._particle_coordinates.data) - frames[step] = dict(P=P.copy(), M=np.asarray(M.data[:, 0]).copy(), n=n.copy()) - if step < STEPS: - swarm.advection(V, DT, order=2) - -os.makedirs(OUT, exist_ok=True) -tag = "popctl" if POPCTL else "nopopctl" -np.savez(f"{OUT}/repop_{tag}.npz", hist=np.array(hist), - **{f"P{k}": v["P"] for k, v in frames.items()}, - **{f"M{k}": v["M"] for k, v in frames.items()}, - **{f"n{k}": v["n"] for k, v in frames.items()}, - steps=np.array(sorted(frames)), cell=CELL, dt=DT) - -h = np.array(hist) -print(f"RESULT {tag}: cells {ncells}, start {int(h[0,1])} particles " - f"-> end {int(h[-1,1])} | empty cells {int(h[0,2])} -> {int(h[-1,2])} | " - f"cells below 6 {int(h[0,3])} -> {int(h[-1,3])} | min per cell {int(h[-1,4])}", flush=True) +velocity = sympy.Matrix([[x, -y]]) # incompressible pure shear + +# A true outflow: particles that leave the box are deleted rather than +# clamped onto the wall. +mesh.return_coords_to_bounds = None + +# %% [markdown] +""" +## A marker layer on a material swarm + +`proxy_location="cells"` fits a polynomial to the particles **of each cell**, +so a cell that runs out of particles has nothing to fit. That is the mapping +population control exists for. +""" + +# %% +materials = uw.swarm.MaterialSwarm( + mesh, fill_param=params.uw_fill_param, + proxy_location=params.uw_proxy_location, +) +materials.add("matrix", density=1.0) +materials.add("layer", density=1.0) +materials["layer"] = sympy.Abs(y) < 0.2 + +if params.uw_population_control: + # Refill starved cells at the end of every advection. A new particle takes + # the material of its nearest neighbour: repopulate() does that for any + # INTEGER variable without being asked, because the average of two + # material labels is not a label. + materials.population_control = dict(min_per_cell=params.uw_min_per_cell) + +layer_area = uw.maths.Integral(mesh, materials["layer"].mask) + +# %% [markdown] +""" +## Extend the box +""" + +# %% +initial_area = layer_area.evaluate() + +for _ in range(params.uw_steps): + materials.advection(velocity, params.uw_dt, order=2) + +elapsed = params.uw_steps * params.uw_dt +final_area = layer_area.evaluate() +expected = initial_area * math.exp(-elapsed) + +uw.pprint( + f"proxy_location={params.uw_proxy_location} " + f"population_control={bool(params.uw_population_control)}: " + f"layer area {initial_area:.4f} -> {final_area:.4f} at t={elapsed:g} " + f"(exact thinning gives {expected:.4f}, " + f"so this is {final_area / expected:.2f}x the right answer)" +) + +# %% [markdown] +""" +## What the numbers say + +Measured on this rig, `cellSize=0.08`, 40 steps: + +| `proxy_location` | population control | layer area | vs exact | +|---|---|---|---| +| `"cells"` | on | 0.1125 | 1.03x | +| `"cells"` | off | 0.5505 | **5.03x** | +| `"integration_points"` | on | 0.1169 | 1.06x | +| `"integration_points"` | off | 0.1175 | 1.07x | + +Starvation wrecks the per-cell fit, which needs particles *in that cell*. The +nearest-particle mapping degrades gracefully by comparison — an empty cell +still finds a plausible particle nearby — so with `"integration_points"` the +field-level answer barely moves and the cost of losing particles shows up +only in the swarm's own bookkeeping. + +Population control is cheap and always safe; this is where it is *necessary*. +""" diff --git a/src/underworld3/materials.py b/src/underworld3/materials.py index 8aadc1c32..2ecb4a974 100644 --- a/src/underworld3/materials.py +++ b/src/underworld3/materials.py @@ -683,12 +683,12 @@ def _push_all(self): def _push_to(self, solver): """Set every property the solver's constitutive model recognises.""" - model = getattr(solver, "_constitutive_model", None) - if model is None: - return # pushed again when the model is set + constitutive_model = getattr(solver, "_constitutive_model", None) + if constitutive_model is None: + return # pushed again when the constitutive model is set if len(self._registry) == 0: return - parameters = model.Parameters + parameters = constitutive_model.Parameters recognised = set(type(parameters)._list_valid_parameters(type(parameters))) for name in sorted(self._registry.declared_properties() & recognised): setattr(parameters, name, self.blend(name)) @@ -696,10 +696,10 @@ def _push_to(self, solver): def _recognised(self): names = set() for solver in self._solvers: - model = getattr(solver, "_constitutive_model", None) - if model is None: + constitutive_model = getattr(solver, "_constitutive_model", None) + if constitutive_model is None: continue - parameters = model.Parameters + parameters = constitutive_model.Parameters names |= set( type(parameters)._list_valid_parameters(type(parameters)) ) @@ -836,9 +836,9 @@ def _ensure_built(self): self.mesh, _vars_before, len(self._registry)) self._registry._built.append(self) # material 0 owns everything not claimed by anyone else - self._level_set_vars[0].data[...] = 1.0 + self._level_set_vars[0].array[...] = 1.0 for i in range(1, len(self._level_set_vars)): - self._level_set_vars[i].data[...] = 0.0 + self._level_set_vars[i].array[...] = 0.0 pending, self._pending = self._pending, [] for definition, region in pending: @@ -880,14 +880,14 @@ def _paint(self, definition, region): notebook cell expects. """ selected = self._region_mask(region) - held = np.asarray(self._level_set_vars[definition.index].data).reshape(-1) > 0.5 + held = np.asarray(self._level_set_vars[definition.index].array).reshape(-1) > 0.5 released = held & ~selected for i, var in enumerate(self._level_set_vars): - values = np.asarray(var.data).reshape(-1).copy() + values = np.asarray(var.array).reshape(-1).copy() values[selected] = 1.0 if i == definition.index else 0.0 if released.any(): # back to the default material values[released] = 1.0 if i == 0 else 0.0 - var.data[:, 0] = values + var.array[:, 0, 0] = values def _integration_points(self): self._ensure_built() diff --git a/src/underworld3/swarm_materials.py b/src/underworld3/swarm_materials.py index d8fcf0c18..0538c4f57 100644 --- a/src/underworld3/swarm_materials.py +++ b/src/underworld3/swarm_materials.py @@ -217,12 +217,12 @@ def _paint(self, definition, region): """Give ``definition`` exactly ``region``, and nothing else — see ``MaterialRegions._paint``; assignment replaces rather than unions.""" selected = self._region_mask(region) - labels = np.asarray(self._index_var.data).reshape(-1) + labels = np.asarray(self._index_var.array).reshape(-1) released = (labels == definition.index) & ~selected with uw.synchronised_array_update(): - self._index_var.data[selected, 0] = definition.index + self._index_var.array[selected, 0, 0] = definition.index if released.any(): - self._index_var.data[released, 0] = 0 + self._index_var.array[released, 0, 0] = 0 def _region_mask(self, region): """A boolean array over the particles."""

epi`NcFqs0D=FqmGTk;O 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∋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