You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Volumetric forces are applied where the velocity lives. A per-cell body force
(enable_cell_force: the CFD-DEM feedback, Boussinesq buoyancy) and the drag coefficient
(enable_drag) are now evaluated at the velocity unknown's position by one rule for every
equation: on the staggered grid the mean of the two cells sharing the face, on the collocated grid
the cell value. Before, the constant-density path applied the cell value half a cell off the face
(first order), and on the variable-density, non-porous path the drag's right-hand side and its
implicit diagonal used different values. Surface forces (pressure, viscous stress, surface
tension) are unchanged: they are integrals over the control volume's faces, not interpolated
cell values.
Variable viscosity on the staggered grid is taken on the velocity control volume's own faces.
Each velocity component used to see the viscosity half a cell shifted. A mirror-symmetric pair of
runs now stays symmetric to round-off (asymmetry 1e-2…3e-2 → 1e-14); in the bubble column the
bubbles had collected at one wall.
Collocated variable density and surface tension. The pressure, surface-tension and body
forces enter the implicit momentum predictor instead of a face-acceleration kick after it, and a
balanced-force pre-projection (set_balanced_force_projection) is on by default in that
configuration (off, with a one-time notice, when the domain has an inflow or outflow face): a
fluid at rest under gravity with a density jump stays at rest to ~1e-12.
Collocated advection uses the projected, divergence-free face velocity (the
Almgren–Bell–Colella prescription) instead of the average of the two cell velocities, so the
advective flux is conservative. This was the last uniform-grid difference from peclet.amr.
Changed (API)
diagnostics.rebalance_by_weights(w) builds a weighted partition whose cuts sit on multiples of 2^a — so the pressure multigrid can coarsen a levels in place before any redistribution —
and returns that alignment. A code that co-decomposes with flow must build its partition from
the same weights and this alignment (dem's migrate_to_weights(w, align=)).
predict_hierarchy(..., weights=) forecasts the multigrid ladder after such a rebalance and then
returns (rows, align); without weights it returns the rows alone, exactly as before.
init_mpi must precede the geometry, and now raises otherwise. A geometry built first left
each rank with a pressure hierarchy for its own block as if it were a periodic domain: every solve
converged, but the projected velocity kept each block's divergence (max |div u| 7.5e-2 at np 2).
A variable viscosity with an explicitly requested velocity multigrid raises ValueError (the
V-cycle takes a constant viscosity and used to ignore the closure silently).
set_superficial_velocity(enabled, axis, velocity) holds the mixture superficial velocity along
a periodic axis.
Added
Coarse-level multigrid stages from core 1.2.0: the telescope's stage policy and field movement
are core's, and a weighted level-0 partition takes a Repartition stage instead of collapsing onto
few ranks.
VoF marker blocks: a curvature admissibility clip (|κ| ≤ 1/Δ_min), removal of sub-grid debris
with its volume returned exactly to the interface, and a capillary time-step bound that
accounts for overlapping (gas–gas) interfaces (diagnostics.set_vof_phantom_capillary_bound,
default on). The overlap failure of colliding bubbles traced to debris curvature.
A faster VoF step with identical results: face-form pressure-operator storage (32 instead of 56
bytes per cell per read), fused periodic wraps, device-resident Krylov scalars, and batched
kernels across all local marker blocks.
Fixed
ε^n survives a rebalance. A redistribution whose blocks changed size reset the previous
porosity to zero before the migrated field arrived, so the first porous projection after the move
saw dε/dt = ε/dt (pressure off by 2e2 in coupling's rebalance test).
VoF markers touching a low no-slip wall no longer gain or lose volume through it (per-marker
volume drift 3.9e-3 → 7.7e-15 over 3000 steps).
The pressure solve no longer discards its correction on a uniform periodic bed. When the
right-hand side is round-off on a constant (the null space of the periodic pressure operator), the
bottom-level CG divided 0 by 0; the NaN made the multigrid preconditioner report a non-finite
value, and the solver zeroed the whole correction and marked the step CAPPED. The bottom CG now
stops when p·Ap = 0, as core's GraphAMG PCG already did. Paths with p·Ap > 0 are bitwise
unchanged; the porous fixed-bed Ergun case goes from 63 CAPPED warnings to none. Double operator
storage had been credited with curing this; it did not.