forked from 1b-agent/fieldcraft-upstream
Tet mesh quality: one validity criterion, Delaunay refinement, ODT, Klingner–Shewchuk, tet10
The end-to-end demo met a raw-CDT sliver that the validity gate accepted (exactly positive) and the solver refused. Now: - One validity criterion, `fieldcraft_model::admissible_jacobian` (normalized Jacobian above 1e-12), used by the implicit solver (fem `positive_inverse`), the explicit tet4/hex8 kinematics and the mesh gate, which proves it on the whole element (tet4: the solvers' own Jacobian; curved kinds: a Bernstein floor), so whatever passes the gate passes the solvers. - CDT rounding repaired by flips on the rounded mesh (Diazzi et al. 2023 §5.1) instead of the ±2-ulp nudge. - `fieldcraft-mesh::tet`: a mutable tetrahedral complex whose every change is a checked replacement (positive and admissible tetrahedra, faces matched with opposite orientation) with an exact undo log; edge removal (Klincsek), multi-face removal, Delaunay insertion with boundary faces, edge collapse; a curvature- and thickness-graded size field; constrained Delaunay refinement with encroachment splits; ODT smoothing; the Klingner–Shewchuk schedule; boundary vertices moved onto the exact B-rep surfaces at the end; tet10 with mid-edge nodes on the geometry. - `mesh.tet.generate` gains size, order, quality, quality_target, curvature_angle, grading, max_passes, max_points and reports the CDT's and the mesh's quality; `solve.probe` takes a set and reports its largest von Mises stress. - Oracle cases filleted-bracket-fillet-stress(-coarse): the fillet's peak von Mises stress on tet10 meshes of 2k and 13.5k elements, 213.3 MPa (a four-level study stays within 1.8%); the CDT cases keep the raw tetrahedralization. - Corpus quality columns: all 20 valid parts mesh and pass the gate. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm
This commit is contained in:
1 parent
fed27d816d
commit
9469ac0853
53 files changed
+5880
-278
No files matched your search
@@ -250,9 +250,12 @@ Delaunay methods with Voronoi/ODT improvement, then (2) all-hex and hex-dominant
|
||||
- Reference points (§3.3) are searched among the tetrahedra whose boxes meet the missing subsegment's box (they
|
||||
contain the tetrahedra the subsegment crosses); on the corpus this picks the same point as searching the whole
|
||||
diametral ball.
|
||||
- Rounding (§5.1): a Steiner point whose rounding leaves an incident tetrahedron non-positive tries the doubles
|
||||
within two ulps per coordinate, nearest first; the flip-based improvement of §5.1 is not implemented. All 20
|
||||
valid corpus parts pass the validity gate after rounding.
|
||||
- Rounding (§5.1): the flips of §5.1 run on the rounded coordinates (`cdt::repair`), decided by exact `orient3d` on
|
||||
the doubles: every tetrahedron that rounding (or nearly cospherical input) leaves flat, inverted or below
|
||||
FieldCraft's validity criterion is targeted by edge removal and multi-face removal that never touch a segment, and
|
||||
a flat tetrahedron lying on one input triangle is deleted. What survives (a flat tetrahedron spanning two nearly
|
||||
coplanar input triangles: 1–65 per part on 7 corpus parts) is counted by the gate and removed by the quality stage,
|
||||
whose boundary is the B-rep faces rather than the input triangles.
|
||||
|
||||
**A2.4 Diazzi and Attene 2021, convex polyhedral meshing.** **Verdict: reference.**
|
||||
- **Citation.** L. Diazzi, M. Attene. *Convex polyhedral meshing for robust solid modeling.* ACM TOG 40(6):259, 2021.
|
||||
@@ -319,6 +322,16 @@ Delaunay methods with Voronoi/ODT improvement, then (2) all-hex and hex-dominant
|
||||
- **Complexity.** Medium, on top of A2.3.
|
||||
- **Code.** None read.
|
||||
|
||||
- **Implemented** in `fieldcraft-mesh::tet::refine`: circumcentres of tetrahedra whose radius–edge ratio exceeds B = 2
|
||||
(when their circumradius is at least half the local size) or whose circumradius exceeds 0.75 of the local size; a
|
||||
circumcentre outside the domain or inside a boundary face's diametral sphere splits that face instead (at its
|
||||
circumcentre when inside it, else at its longest edge's midpoint, a feature edge split when that edge is one), every
|
||||
boundary point projected onto its B-rep face or curve. Small input angles are handled by bounds rather than Si's
|
||||
theory: faces below half the local size are not split, no vertex closer than 0.05 of the size to another, a
|
||||
tetrahedron whose point could not go in is not retried, caps on insertions and tetrahedra. Before refinement, edge
|
||||
collapse coarsens the boundary recovery's dense Steiner points (X. Li, M. S. Shephard, M. W. Beall, *3D anisotropic
|
||||
mesh adaptation by mesh modification*, CMAME 194(48–49):4915–4950, 2005).
|
||||
|
||||
**A3.2 Cheng, Dey, Shewchuk, *Delaunay Mesh Generation* (CRC, 2012).** **Verdict: reference (the textbook).**
|
||||
- **Links.** DOI [10.1201/b12987](https://doi.org/10.1201/b12987).
|
||||
- **Use.** The consolidated treatment of 3D refinement, small-angle handling and sliver theory. Buy it.
|
||||
@@ -356,6 +369,12 @@ Delaunay methods with Voronoi/ODT improvement, then (2) all-hex and hex-dominant
|
||||
- **Complexity.** Moderate.
|
||||
- **Code.** CGAL is GPL: FORBIDDEN. This paper is the readable source of the scheme.
|
||||
|
||||
- **Implemented** in `fieldcraft-mesh::tet::smooth` as the density-weighted ODT update (Chen–Xu, Alliez et al.; weight
|
||||
`h⁻³`), interleaved with refinement in three rounds as in A3.5; boundary vertices move in their face's tangent plane
|
||||
and are projected back onto the B-rep face, curve vertices move along their curve, corners stay. A move is kept when
|
||||
every tetrahedron stays positive and its star's worst quality stays above min(old worst, sin 17.5°). Tetrahedra whose
|
||||
circumcentre is further than their longest edge from their centroid contribute their centroid instead.
|
||||
|
||||
**A3.6 Klingner and Shewchuk 2007, Aggressive Tetrahedral Mesh Improvement.** **Verdict: BUILD ON (final sliver-removal stage).**
|
||||
- **Citation.** B. M. Klingner, J. R. Shewchuk. IMR 16, 3–23, 2007.
|
||||
- **Links.** DOI [10.1007/978-3-540-75103-8_1](https://doi.org/10.1007/978-3-540-75103-8_1).
|
||||
@@ -376,6 +395,16 @@ Delaunay methods with Voronoi/ODT improvement, then (2) all-hex and hex-dominant
|
||||
- **Complexity.** Moderate: edge removal requires Shewchuk's dynamic programming over the edge ring.
|
||||
PDF: https://people.eecs.berkeley.edu/~jrs/papers/edge.pdf, not separately verified.
|
||||
- **Code.** The Stellar code's licence was not verified, so it is not read.
|
||||
- **Implemented** in `fieldcraft-mesh::tet::{ops, improve}` from the two papers: Klincsek's dynamic programming for edge
|
||||
removal (interior edges; boundary edges of one flat B-rep face end in a 2-2 flip), multi-face removal grown greedily
|
||||
over the sandwiched faces, nonsmooth optimization smoothing (active set, smallest vector of the convex hull of the
|
||||
active gradients, line search; gradients by central differences), and the composite vertex insertion with rollback
|
||||
(barycentres of boundary faces, of the tetrahedron, midpoints of boundary edges, and a point inside off a flat
|
||||
boundary edge). Deviations: the inserted vertex takes the Delaunay cavity rather than the optimal cut of §3.4; each pass
|
||||
smooths and flips the tetrahedra below sin 40° and inserts only when the worst did not improve; passes and the
|
||||
insertion list are capped. Objective: the minimum dihedral sine. Every operation is a checked replacement of a region
|
||||
(positive by exact `orient3d`, faces matched with opposite orientation, removed vertices fully inside), so the mesh is
|
||||
valid after each step.
|
||||
|
||||
**A3.7 Cheng, Dey, Edelsbrunner, Facello, Teng 2000, Sliver exudation.** **Verdict: reference.**
|
||||
- **Citation.** J. ACM 47(5):883–904, 2000. DOI [10.1145/355483.355487](https://doi.org/10.1145/355483.355487).
|
||||
|
||||
Reference in new issue
Block a user