Skip to content

Releases

QuADMESH 0.2.6

Choose a tag to compare

@domattioli domattioli released this 24 Oct 01:36
a89e75c

Patch release: the per-layer sweep no longer leaves hanging nodes, and the thesis PDF is replaced by a copy with every reference resolved.

Fixed

  • The per-layer QuADMESH+ sweep is conforming again. It compared sub-mesh boundary edge ids with parent edge ids, so most leftover triangles fell through to edge_insertion, whose opposite-triangle split is blocked by the #81 guard; each insertion left a hanging node. The sweep now classifies each leftover triangle on its live outer ring and closes it by a ring-edge split or a vertex split. It never collapses an edge. tri2quad_routine saves and restores the caller's mesh state. DEFAULT_LOST rises in the default pipeline; preserve_boundary=True still loses no boundary vertex.

Changed

  • docs/Mattioli_Thesis.pdf is a rebuild of the 2017 thesis from its LaTeX source with every cross-reference and citation resolved. The OhioLINK copy prints ?? and [?]. The corrected PDF is archived at 10.5281/zenodo.23607233 and attached to each GitHub release; README, CITATION.cff and .zenodo.json point at that DOI.
  • Contact lines use GitHub profile links in place of email addresses.
  • CI runs the DomI release-docs lint on README, CITATION.cff and .zenodo.json changes.

Removed

  • quadmesh._topology: private wrapper module with no source callers. Code calls CHILmesh.ccw_edges_around_vert, chilmesh.quad_from_tri_pair and chilmesh.quads_from_tri_pairs directly. Other CHILmesh 1.5.5 overlaps (MSH 2.2 I/O, benchmark metrics, create_quad_domain, repair edge map and merge, quality report, signed-area predicates) stay in quadmesh because the CHILmesh versions differ in padding, precision, vertex renumbering, output keys or are private.

Roadmap at 0.2.6

  • Now: boundary-layer quality, including the ENPAC2003 low-skew tail (#90); right-size the test suite (#109).
  • Next: boundary-type-aware layer seeding (#77); a MATLAB parity oracle (#116); wire tri2quad(aggressive=) to CHILmesh merge_elements.
  • Later: parallelization (#38); evaluate a C++ or Rust backend; formal integration with ADMESH and CHILmesh.

How to cite

DO Mattioli, & EJ Kubatko (2026). QuADMESH+: Quadrangular ADvanced Mesh generator (Version 0.2.6) [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.20350483

QuADMESH v0.2.5

QuADMESH v0.2.5 Pre-release
Pre-release

Choose a tag to compare

@domattioli domattioli released this 12 Oct 05:15
d52ea1a

Documentation and metadata release, with one algorithm fix: the boundary layer is now routed as the thesis specifies.

Added

  • quadmesh-bench and quadmesh.benchmark: adapter harness comparing QuADMESH+ with other triangle-to-quad methods and, when the executables are installed, Gmsh Blossom-Quad and QuadriFlow (subprocess only, nothing vendored). Results for the bundled meshes are in docs/benchmarks/0.3.0/.

  • n_concave in compute_quality_stats and concave=N in format_quality_report: count of quads with a reflex corner.

  • docs/algorithm.md: one long-form document for the thesis algorithm, the port as implemented, a thesis-versus-port difference table, the experimental global-matching fallback, its relation to Blossom-Quad (Remacle et al. 2012), and MATLAB parity status.

  • tests/test_release_metadata.py: guard test that fails when CITATION.cff or README.md names a DOI other than the Zenodo concept DOI 10.5281/zenodo.20350483.

  • Ethan J. Kubatko (Ohio State University) as second author in CITATION.cff.

  • preserve_boundary option (default False) on run_pipeline and post_process_routine, plus protected_points on post_process_routine and cleanup_boundary_quads, and the CLI flag --preserve-boundary. With it on, boundary-quad cleanup skips any collapse that would delete an original boundary vertex and any shift that would move one. On the four bundled meshes this changes vertices lost from 12, 18, 4 and 2 to 0, at a cost of 1 to 9 extra elements and 0.001 to 0.011 mean skew. The default stays MATLAB-faithful.

Known limitations

  • Some boundary-layer quads can be concave. Smoothing can push a wide pinned boundary corner past 180 degrees. Both are tracked for a later release.

Changed

  • Test fixtures now come from the Valence API through chilmesh.registry (VALENCE_TOKEN), pinned by SHA-256. The GitHub contents fetcher, the GITHUB_TOKEN path and the git-blob pins are removed. Mixed_Test.14 left the registry (Valence#347), so its tests skip.
  • Dependency pin raised to chilmesh>=1.5.5.
  • README opening states what the conversion keeps and adds, and links to docs/algorithm.md. The status banner no longer carries a month stamp.
  • CITATION.cff and README.md cite the Zenodo concept DOI 10.5281/zenodo.20350483 in place of the version DOI 10.5281/zenodo.20351165.
  • Version is 0.2.5 in pyproject.toml, src/quadmesh/__init__.py, and CITATION.cff.
  • scripts/dev_setup.sh installs chilmesh from PyPI by default. Set QUADMESH_CHILMESH_SRC=<path> to editable-install a local CHILmesh checkout instead.

Fixed

  • The per-layer sweep flagged the innermost layer (n_layers - 1) as the boundary layer. It now flags layer 0, which is the boundary layer in chilmesh and in removeTrianglesFun.m. Output keeps zero interior residual triangles, is quad-pure by default, and keeps every original boundary vertex. Mean skew on the bundled structuredMesh1 changes from 0.696 to 0.647, and the expected values in the quality tests were updated (spec 059).
  • fem_smoother now restores the exact coordinates of every boundary vertex after each pass. CHILmesh.direct_smoother pins the boundary with a penalty and left up to 2e-10 of drift (no fixed-vertices argument exists). tests/test_boundary_pinned_smoothing.py covers all bundled triangular meshes. By default run_pipeline can still drop original boundary vertices, because cleanup_boundary_quads collapses boundary quads as the MATLAB code does; smoothing does not cause it. Pass preserve_boundary=True (CLI: --preserve-boundary) to keep all of them.
  • AGENTS.md and scripts/dev_setup.sh stated that chilmesh is not on PyPI. It is (chilmesh>=1.2.1).

Removed

  • docs/algorithm_writeup.md. Its content is section 5 of docs/algorithm.md, relabelled as the experimental fallback path.

Roadmap at 0.2.5

  • Now: boundary-layer quality, including the ENPAC2003 low-skew tail (#90); right-size the test suite (#109).
  • Next: boundary-type-aware layer seeding (#77); a MATLAB parity oracle (#116); wire tri2quad(aggressive=) to CHILmesh merge_elements.
  • Later: parallelization (#38); evaluate a C++ or Rust backend; formal integration with ADMESH and CHILmesh.

How to cite

Mattioli, D. O., & Kubatko, E. J. (2026). QuADMESH+: Quadrangular ADvanced Mesh generator (Version 0.2.5) [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.20350483

QuADMESH v0.2.0

QuADMESH v0.2.0 Pre-release
Pre-release

Choose a tag to compare

@domattioli domattioli released this 05 Jul 18:16
85b1438

Added

  • Opt-in refuse_boundary_merge flag (#98 option A): guards boundary-layer merges that produced geometric defects on offline boundary geo-tri baseline.
  • Offline boundary geo-tri baseline pinned as #98 CI regression gate.

Changed

  • Tests CI minimized: PR-to-main + single Python 3.11 lane (#265-style conformance).
  • Agent/dev-process files de-vendored (routine instructions read from DomI canon; retros moved to DomI central corpus).

QuADMESH 0.1.1

QuADMESH 0.1.1 Pre-release
Pre-release

Choose a tag to compare

@domattioli domattioli released this 15 Jun 19:37
920f398

quadmesh 0.1.1

Added / Fixed (since 0.1.0)

  • method="quadmesh+" is the sole + default tri-to-quad method; "faithful"/"matching" removed.
  • Greedy interior-saturating pairing (T017/T018): zero interior triangles; mean quality up (Test_Case_1 0.573→0.696, Block_O 0.251→0.680).
  • Test .14 fixtures provisioned on demand from the Valence registry.

Changed

  • chilmesh pin raised to >=1.2.1.
  • Source archives exclude agent/dev-process files via .gitattributes.

QuADMESH v0.1.0

QuADMESH v0.1.0 Pre-release
Pre-release

Choose a tag to compare

@domattioli domattioli released this 23 May 04:32

First tagged release of QuADMESH+.

Highlights

  • MATLAB source (02_QuADMESH_Library/) — original Tri2Quad routine + post-process pipeline (Main.m entry, layer-based decomposition, doublet collapse, quad-vertex merge, smoothing).
  • Python port (python/quadmesh/, alpha) — tri2quad + post_process + repair pipeline running on top of chilmesh. CLI: python -m quadmesh.cli <input.14> -o <out.14>.
  • Repair pass (quadmesh.repair) — boundary midpoint snap, bowtie fix, validator-cluster dissolve + ear-clip + tri-pair merge.
  • Validation suite (quadmesh.validation) — predicates, broadphase, validator producing typed violations.
  • Tests — 61 passing (~20s).
  • Test cases (03_CHILMesh_Test_Cases/) — Block_O, Test_Case_1..4, annulus, WNAT_Hagen, Great_Lakes, etc.

Status

  • MATLAB code: original research implementation from Mattioli MS thesis (2017, OSU).
  • Python port: 0.4.0 alpha — functional end-to-end (verified on WNAT_Hagen, ~49k elements: 0 SELF_INTERSECTING_QUAD, 0 INTERIOR_OVERLAP, 0 EDGE_CROSSING after repair). Not yet on PyPI.

Citation

Mattioli, D. D. (2017). QuADMESH+: A Quadrangular ADvanced Mesh Generator for Hydrodynamic Models [Master's thesis, Ohio State University]. http://rave.ohiolink.edu/etdc/view?acc_num=osu1500627779532088

QuADMESH v0.0.1

QuADMESH v0.0.1 Pre-release
Pre-release

Choose a tag to compare

@domattioli domattioli released this 23 May 02:26
a3d14ad

No idea if its stable; releasing just to get a zenodo DOI prior to porting to stable python and later cpp