About SHORE
SHORE (Structured Hyperbolic Overlapping Remeshing Engine) is a Python tool for hyperbolic mesh generation in Chimera (overset) CFD. It produces both classes of grid a Chimera assembly needs:
- Body-fitted near-body grids — structured volumes wrapping a body surface, generated by hyperbolic normal extrusion.
- Parametric backgrounds — box, annular cylinder, and flat-caps cylinder primitives that fill the far field.
The two flows live in one tool with one set of CLI verbs and one Python API, so a full overset assembly can be built end-to-end without touching another mesher.
Motivation
A Chimera mesh assembly is a collection of overlapping structured grids. The two classes have different requirements:
- Near-body grids must conform to the body surface, with tight wall-normal resolution and well-controlled growth into the far field.
- Backgrounds must be cheap, regular, and large enough to host the physics, with cell sizes that overlap cleanly with the near-body grids' outer shells.
SHORE produces both in the same world coordinates and packages them for the downstream solver: per-block .geo, packed .grd, the cc.par chimera descriptor, and marker boxes for hole-cutting. Hole cutting, fringe identification, and donor search are the solver's job; SHORE's contract is "generate every grid the assembly needs and write it to disk."
Inputs
| Today | Roadmap |
|---|---|
| Triangulated STL (binary or ASCII) for body-fitted meshes | STEP / IGES / BREP via pythonOCC or cadquery |
| Parametric geometry for primitives (no surface input required) | Multi-body STL with automatic decomposition |
Body-fitted meshing assumes the input surface is star-shaped from a chosen anchor (the body centroid by default); see Surface projection — failure modes.
Design philosophy
Stages are explicit. The body-fitted pipeline has two clearly separated stages — surface projection and hyperbolic marching — each available as a CLI command and a Python entry point. Intermediate results can be inspected, and only the stage that changed needs to be rerun.
Failures are loud. Every layer is checked for cell inversion before the grid advances; a negative Jacobian aborts marching immediately with a precise error message. Adjacency, BCs, and seam orientation are validated at wiring time, not at solver runtime. There are no silent bad meshes.
No topology guessing. SHORE does not attempt to decompose arbitrary surfaces into structured patches automatically. The body-fitted topologies (O-grid, cubed sphere, OH hybrid) assume the body is star-shaped with respect to its anchor; the C-grid expects a sharp- or blunt-TE wing-like body. Arbitrary multi-block surface decomposition is on the roadmap.
Scope
| In scope | Out of scope (roadmap) |
|---|---|
| Body-fitted: O-grid (1 block), cubed sphere (6 blocks), C-grid (3 / 4 / 1 blocks), OH hybrid (12 blocks) | Multi-block arbitrary-surface decomposition |
| Backgrounds: box, annular cylinder, flat-caps cylinder | Elliptic volume smoothing |
| Triangulated STL surface input | CAD surface input (STEP / IGES / BREP) |
| Hyperbolic normal extrusion with seam-aware kernel | Advanced surface remeshing |
| Per-edge spacing laws (uniform / tanh / tanh2 / pinned) | Box-shaped outer boundary morphing |
Adjacency JSON sidecar with axis_map orientation | Other CFD formats (Plot3D, CGNS) |
Xall pipeline: .geo, .grd, cc.par, marker boxes, multi-component merge | Hole cutting / fringe identification (solver's job) |
Related tools
- Xall — the target Chimera CFD solver; SHORE generates its
.grd+cc.parpair. - trimesh — STL I/O, watertightness checks, BVH-accelerated ray casting.
- NumPy — every numerical kernel; pure Python, no compiled extensions.
- Typer + Rich — CLI framework and progress display.
- PyVista (optional,
[vis]extra) — interactive viewer and VTK export.