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
+11
-4
@@ -65,9 +65,13 @@ Rules beyond the layer order:
|
||||
perturbation for degeneracies), boundary recovery by the robust constrained Delaunay method of
|
||||
Diazzi et al. 2023 (implicit Steiner points on indirect predicates, gift-wrapping facet
|
||||
recovery; `fieldcraft-mesh::cdt`, command `mesh.tet.generate`), so every boundary triangle and
|
||||
its B-rep face tag survives. Then constrained Delaunay refinement to a
|
||||
size field, ODT smoothing interleaved as in Tournois et al. 2009, and the Klingner–Shewchuk 2007
|
||||
improvement schedule against slivers.
|
||||
its B-rep face tag survives; rounding is repaired by flips (§5.1). Then the quality stage
|
||||
(`fieldcraft-mesh::tet`): a curvature-graded size field, edge-collapse coarsening, constrained
|
||||
Delaunay refinement with boundary points projected onto the B-rep faces and curves (exact
|
||||
surfaces from SolidCraft where analytic, the tessellation otherwise), ODT smoothing
|
||||
interleaved as in Tournois et al. 2009, the Klingner–Shewchuk 2007 improvement schedule
|
||||
against slivers, and tet10 with mid-edge nodes on the geometry. Every step is a checked local
|
||||
replacement, so the mesh stays valid throughout.
|
||||
4. **Hexahedral meshing (the core).** Grid-based all-hex first, the one family that meshes any
|
||||
input validly. `fieldcraft-mesh::octree` (command `mesh.hex.octree`): a 27-tree over the part,
|
||||
refined by curvature, thickness and narrow faces, balanced and cut by the 3-refinement
|
||||
@@ -107,7 +111,10 @@ Rules beyond the layer order:
|
||||
faces, edges and vertices become geometry tags that sets select. It meshes the analytic
|
||||
shapes of the verification cases.
|
||||
6. **Quality.** Scaled Jacobian, aspect ratio, dihedral angles; every generated mesh is checked
|
||||
for positive Jacobians and conserved volume before it reaches the model.
|
||||
for valid Jacobians and conserved volume before it reaches the model. Validity is one
|
||||
criterion shared with both solvers (`fieldcraft_model::admissible_jacobian`: normalized
|
||||
Jacobian above 1e-12): the gate proves it on the whole element, the solvers check it at their
|
||||
integration points, so a mesh the gate accepts is never refused by a solver.
|
||||
|
||||
## Model definition
|
||||
|
||||
|
||||
Reference in new issue
Block a user