The platform maths libraries' atan2 and cbrt differ in the last bits
between macOS and glibc, so the dihedral angles and the shape measure a
mesh reports did too. The crate's own versions use + - * / and sqrt
only (correctly rounded everywhere) and agree with the platform's to a
few ulps.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
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 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm
* mesh: boundary surface preparation (weld, manifold and orientation checks, exact self-intersection, feature edges)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm
* engine: mesh.surface.check on an open design's body or an imported surface
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm
* engine: struct-init the test session
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm
* surface: weld at an absolute distance too; the engine welds CAD tessellations at twice SolidCraft's linear tolerance
Faces of a SolidCraft tessellation carry their own copies of shared boundary points, which agree
only to within the kernel's tolerance (up to ~2e-6 mm on the test corpus).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm
* docs: surface preparation in the literature survey, architecture and roadmap
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm
* surface: simplify after review
- The weld distance travels with the mesh (SurfaceMesh::weld_distance, set by Shape::tessellate),
so every consumer welds a tessellation correctly without opting in.
- Exact tests are infallible on predicates::orient2d_projected (shared with generic_orient2d), and
compute each vertex's plane side once per pair with an early reject.
- One Box3 for the weld, the BVH and shells; a Half struct for edges; the weld's two lookups share
one loop, with chained grid cells; cached normals for feature edges; shared parameter helpers.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm
* corpus: boundary surface preparation as a corpus stage
20 of 21 parts are valid boundaries with their expected genus; cross-cylinders' tessellation has
cracks and flipped triangles where its two intersection curves meet.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm
---------
Co-authored-by: jyviko <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>