Repository navigation
Releases
QuADMESH 0.2.6
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_routinesaves and restores the caller's mesh state.DEFAULT_LOSTrises in the default pipeline;preserve_boundary=Truestill loses no boundary vertex.
Changed
docs/Mattioli_Thesis.pdfis 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.cffand.zenodo.jsonpoint at that DOI.- Contact lines use GitHub profile links in place of email addresses.
- CI runs the DomI release-docs lint on README,
CITATION.cffand.zenodo.jsonchanges.
Removed
quadmesh._topology: private wrapper module with no source callers. Code callsCHILmesh.ccw_edges_around_vert,chilmesh.quad_from_tri_pairandchilmesh.quads_from_tri_pairsdirectly. Other CHILmesh 1.5.5 overlaps (MSH 2.2 I/O, benchmark metrics,create_quad_domain,repairedge 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 CHILmeshmerge_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
Documentation and metadata release, with one algorithm fix: the boundary layer is now routed as the thesis specifies.
Added
-
quadmesh-benchandquadmesh.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 indocs/benchmarks/0.3.0/. -
n_concaveincompute_quality_statsandconcave=Ninformat_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 whenCITATION.cfforREADME.mdnames a DOI other than the Zenodo concept DOI10.5281/zenodo.20350483. -
Ethan J. Kubatko (Ohio State University) as second author in
CITATION.cff. -
preserve_boundaryoption (defaultFalse) onrun_pipelineandpost_process_routine, plusprotected_pointsonpost_process_routineandcleanup_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, theGITHUB_TOKENpath and the git-blob pins are removed.Mixed_Test.14left 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.cffandREADME.mdcite the Zenodo concept DOI10.5281/zenodo.20350483in place of the version DOI10.5281/zenodo.20351165.- Version is 0.2.5 in
pyproject.toml,src/quadmesh/__init__.py, andCITATION.cff. scripts/dev_setup.shinstalls chilmesh from PyPI by default. SetQUADMESH_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 inchilmeshand inremoveTrianglesFun.m. Output keeps zero interior residual triangles, is quad-pure by default, and keeps every original boundary vertex. Mean skew on the bundledstructuredMesh1changes from 0.696 to 0.647, and the expected values in the quality tests were updated (spec 059). fem_smoothernow restores the exact coordinates of every boundary vertex after each pass.CHILmesh.direct_smootherpins the boundary with a penalty and left up to 2e-10 of drift (no fixed-vertices argument exists).tests/test_boundary_pinned_smoothing.pycovers all bundled triangular meshes. By defaultrun_pipelinecan still drop original boundary vertices, becausecleanup_boundary_quadscollapses boundary quads as the MATLAB code does; smoothing does not cause it. Passpreserve_boundary=True(CLI:--preserve-boundary) to keep all of them.AGENTS.mdandscripts/dev_setup.shstated that chilmesh is not on PyPI. It is (chilmesh>=1.2.1).
Removed
docs/algorithm_writeup.md. Its content is section 5 ofdocs/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
Added
- Opt-in
refuse_boundary_mergeflag (#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
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
.14fixtures provisioned on demand from the Valence registry.
Changed
chilmeshpin raised to>=1.2.1.- Source archives exclude agent/dev-process files via
.gitattributes.
QuADMESH v0.1.0
First tagged release of QuADMESH+.
Highlights
- MATLAB source (
02_QuADMESH_Library/) — original Tri2Quad routine + post-process pipeline (Main.mentry, layer-based decomposition, doublet collapse, quad-vertex merge, smoothing). - Python port (
python/quadmesh/, alpha) —tri2quad+post_process+repairpipeline running on top ofchilmesh. 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
No idea if its stable; releasing just to get a zenodo DOI prior to porting to stable python and later cpp