docs: extrude up to a surface in the literature, MCP and meshing skill (#400)

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
This commit is contained in:
jyvikoandClaude Opus 5.5 authored and Irakli Kourtis committed 2026-10-15 16:44:40 -04:00
1 parent c077131285
commit d703cdde0b
3 files changed
+37 -2

No files matched your search

+1 -1
View File
@@ -116,7 +116,7 @@ software on the computer.
| `open` | `path`, `model?` | By extension: `.fieldcraft` (`file.open`), `.solidcraft` (`geometry.open`), `.3mf` (`geometry.import.mesh`). For a design, `model` is `keep` (default: the mesh and definitions stay, as a reopen after an edit wants) or `new` (a new model with the design); the reply's `related` is false when the design has none of the bodies the model refers to, and `stale` lists the mesh bodies and sets that no longer resolve. |
| `save` | `path?` | `file.save`: to `path` or the model's own file. |
| `write_deck` | `format` (abaqus, nastran, lsdyna), `path`, `steps?` | `deck.write`. |
| `mesh` | `method`, `params?` | Runs the mesher (`tet`: `mesh.tet.generate`; `hex`, `hex_sweep`, `hex_mapped`, `hex_blocks`: the structured hex meshers; `cells`: `mesh.cells`, a partitioned part cell by cell; `mirror`: `mesh.mirror`, a meshed half reflected across a plane; `block`: `mesh.block`; `planar`: `mesh.planar`) and replies with its result, `model.info` and `mesh.quality`. |
| `mesh` | `method`, `params?` | Runs the mesher (`tet`: `mesh.tet.generate`; `hex`, `hex_sweep`, `hex_mapped`, `hex_blocks`: the structured hex meshers; `hex_extrude`: `mesh.hex.extrude`, layers from a section up to a target surface; `cells`: `mesh.cells`, a partitioned part cell by cell; `mirror`: `mesh.mirror`, a meshed half reflected across a plane; `block`: `mesh.block`; `planar`: `mesh.planar`) and replies with its result, `model.info` and `mesh.quality`. |
| `solve` | `analysis` (static, nonlinear, frequency, buckle, explicit, fluid, heat), `step?`, `options?` | `solve.<analysis>` with the step and the solver's caps and settings. |
| `show_results` | `step?`, `field?`, `bands?`, `range?`, `deformed?`, `scale?`, `mode?`, `frame?`, `time?` | The `results.*` commands its arguments ask for (`deformed: false` draws the undeformed mesh; `scale` is a factor, 0 for the undeformed shape so a sequence from 0 swings the deformation out, or `"auto"`; `range: {min?, max?}` clamps the legend, values above `max` drawn in the over colour); the reply has the contour range (smallest and largest value and their nodes: `field: "displacement"` gives the largest displacement), modes or frames. |
| `probe` | `step?`, `nodes?`, `at?`, `elements?`, `points?`, `forces?`, `mode?`, `frame?` | `solve.probe`: stored results at nodes, at the nodes nearest to points `at` (structural steps), elements (explicit) or points (fluid). |
+16
View File
@@ -1098,6 +1098,22 @@ onto points, then smoothed). No code, manual or text of any commercial mesher wa
based smoothing, L. A. Freitag, C. Ollivier-Gooch, IJNME 40:3979–4002, 1997; metric: P. M. Knupp,
SIAM J. Sci. Comput. 23(1):193–218, 2001).
### B10. Extrusion up to a surface (implemented in `fieldcraft-mesh::hex::extrude_to`, `mesh.hex.extrude`)
A quad section is carried along straight per-node paths and its last layer ends on target B-rep
faces, so a region need not be sweepable between two parallel faces.
- **Path ends**: Newton's method on the tangent plane of the target's closest point (the trimmed
projection of B9), one step exact on a plane; side-face corners by alternating projections
(J. von Neumann, *Functional Operators, vol. II*, Princeton 1950, ch. 13).
- **Interior nodes**: straight paths plus the boundary's displacement onto the side faces,
interpolated by inverse-distance weights: the boundary-residual correction of P. M. Knupp,
*Next-generation sweep tool: a method for generating all-hex meshes on two-and-one-half
dimensional geometries*, Proc. 7th International Meshing Roundtable, 1998 (as in B8's sweep);
D. Shepard, *A two-dimensional interpolation function for irregularly-spaced data*, Proc. ACM
National Conference 1968.
- **Layer grading**: geometric progression of thicknesses (last over first = bias).
## Part C: Datasets and benchmarks
| Dataset | Content | Licence | Usable for FieldCraft? |
+20 -1
View File
@@ -78,7 +78,26 @@ Before the first mesh command:
- Use edge seeds (`mesh.seed.edge`) so counts match across shared edges and so there are enough
elements through thin walls (at least 2–3 through a wall for bending, 1 for pure conduction only).
- Tet (`tet10` preferred for stress) only for cells that are not worth blocking, and only where
they are far from the region of interest.
they are far from the region of interest. Before falling back to tet on a region that ends on a
curved face, try extrude-to-surface (§3b).
## 3b. Extrude up to a surface — try it before giving up on a region
A region that is one section carried to a curved or tilted end (a boss or rib meeting a curved
wall, an air column under a domed lid, a fillet region capped by a curved face) is not sweepable
between parallel faces, but `mesh.hex.extrude` meshes it:
- `source`: the section's face. If a neighbour (or the cell below) is already meshed there, its
quads are reused and the two meshes share nodes; else a planar face is meshed here at `size`.
A 2D mesh works too (`source_set`).
- `to_surface`: the end faces; `sides`: the region's side faces (give them whenever they are not
straight along the path, so every layer follows them).
- `direction` for a straight region, else `normal`; `layers` (or `size`) and `bias` (< 1 grades
toward the target, e.g. for a boundary layer under a lid).
- Check the reply: `max_target_gap` ≈ 0, `min_scaled_jacobian` ≥ 0.5, `section.shared_nodes`
equal to the section's nodes when it should conform. An error names the node whose path
misses the target or the element that would invert: shorten the region (cut it where the end
turns steep) rather than falling back to tets.
## 3a. Projection blocking