Changelog
Maintain release notes here so the published documentation reflects important changes.
vX.Y.Z - YYYY-MM-DD
-------------------
* Added ...
* Fixed ...
Add a new section for each release and summarise highlights in bullet form.
v1.13.0 - 2026-09-15
Added
meridional_flatten.py: promotes theconverge_diverge_ductexample’s hand-rolled axisymmetric flatten + 2D finite-volume metrics (axisymmetry_error,flatten_to_meridional,node_count_reduction,MeridionalMetrics,build_metrics,enclosed_volume,analytic_volume) into the published library. Deliberately distinct fromflatmesh.flatten_mesh/FlatMesh(multi-block 3D -> unstructured finite-volume graph) and fromglennht.plot3d_flatten_deck(GlennHT export format). The example now imports these fromplot3dinstead of defining them locally; behavior is unchanged (verified against the example’s straight-pipe residual, axisymmetry-error, and duct-volume-vs-analytic-volume checks).Added
examples/multiblock_duct_flatten/: a worked example of the actual multi-block-mesh-to-CFD-solver pipeline (blocks + a YAML file declaring inlet/outlet/wall surfaces in, a solver-agnostic, BC-taggedFlatMeshout), composed entirely from existingconnectivity_fast,glennht.tag_surfaces_geometric, andflatten_mesh(..., bcs=...).Removed
flatmesh.write_flat_mesh/read_flat_mesh(exported since an earlier release but with zero usage or test coverage anywhere in this repo or its examples). Backward-incompatible for any caller using them directly; everything else onFlatMesh(to_hdf5/from_hdf5,to_npz/from_npz,to_vtu,summary) is unaffected and still fully supported.meridional_flatten.block_radiusis no longer exported from the top-levelplot3dpackage (it was never called outside the module itself); the function itself is unchanged and still used internally byaxisymmetry_error/flatten_to_meridional.Volume cross-checks in
colab/Plot3D_Flatten.ipynbandexamples/multiblock_duct_flattennow also (or, where the mesh isn’t a known body of revolution, only) usemesh_quality.cell_volume_divergence– a geometry-agnostic per-cell volume computed directly from each block’s own corner nodes via the divergence theorem – rather than relying solely onanalytic_volume, which only applies to a mesh with a known axisymmetric profile.
v1.12.0 - 2026-09-14
Ported a set of correctness fixes and a new module from the sibling Rust
crate plot3d-rs (commits c7e9cf6, 0e1b1a1, 9ebe7d3,
ed01fd0, a6c9d9c).
Added
connectivity.adaptive_tolerance/TOL_FLOORand an optionaltolparameter onconnectivity/connectivity_fast: node-matching tolerance now scales with coordinate magnitude and the mesh’s own finest cell spacing instead of a fixed1e-6, fixing missed interfaces on large-coordinate meshes.Added
permutation.py(sharedPERMUTATION_MATRICES/grid helpers) andcorrespondence.py(certify_correspondence/certify_permutation): face matches are now certified node-for-node under exactly one of the 8 structured permutations, not just by corner/count agreement. A match that is ambiguous (more than one permutation fits) or that fails on any interior node is now rejected rather than silently accepted. Wired intoconnectivity,rotated_periodicity, and a restructuredtranslational_periodicity.Added
geometry.coincidence_count(KD-tree based): replacedround(x/tol)bucket-equality coincidence tests inface.pyandperiodicity.pywith real Euclidean-distance checks, fixing points that are closer thantolbut straddle a bin boundary being wrongly counted as distinct.Added full-resolution re-validation after GCD-reduced matching in
connectivity_fast,rotated_periodicity, andtranslational_periodicity: a reduced-grid match proposal is now re-certified against the original full-resolution mesh before being returned; one that fails is demoted to outer faces with aRuntimeWarninginstead of being trusted blindly.Fixed
translational_periodicity’s in-plane spacing estimate returning a fabricated1.0(instead of skipping the pair) when a face had fewer than 2 points to measure spacing from.Fixed a permutation-matrix bit-convention mismatch between the exported
orientation.permutation_matrixfield and the internal certification convention that could have caused genuinely valid cross-plane matches to be wrongly rejected on re-validation.Added
mesh_quality.py: a new, fully numpy-vectorized structured-mesh quality battery (cell volume via the divergence theorem, aspect ratio, skewness, collapsed-edge/degenerate-vs-inverted cell classification, handedness, and an element-type census), ported fromplot3d-rs’smesh_quality.rswith severity-taggedSTRICT/STANDARD/RELAXEDthreshold presets and aMeshQualityReport. Cell aspect ratio reportsinf(never a huge finite artefact) for a zero-length edge, and that value is excluded from both the interior and wall aspect-ratio maxima.