Track global facet topology metadata for hex meshes used by face-based DOFs.
- Introduce `Hex8FacetMaps` construction helpers and orientation bookkeeping.
Provide edge/face global IDs and orientation hints for lowest-order facet DOFs on tets.
- Introduce `Tet4FacetMaps` plus builders consumed by DOF handlers.
Document that only structured bricks are supported here and route box mesh
construction through the keyword outer constructor.
- Clarify the `Hex8`-only structured entry point in the docstring.
- Replace positional `Mesh{Hex8}(..., sets...)` with keyword `element_sets` /
`node_sets` arguments.
Use explicit `Mesh{8, Hex8}` signatures, SPDX banner lines, and the keyword
`Mesh{T}(nodes, conn; ...)` outer constructor after the mesh core refactor.
- Update docstrings and method signatures from `Mesh{Hex8}` to `Mesh{8, Hex8}`.
- Build refined meshes via `element_sets`/`node_sets` keywords.
Strip experimental permutation/coloring/ghost/named-ID baggage from the
concrete mesh type, adopt SPDX headers, and route boundary extraction through
an explicit `surface_topology` trait with clearer limitations.
- Replace the legacy banner with SPDX lines and tighten the struct/docstring to
the fields that actually ship today.
- Drop bandwidth/permutation maps, industrial ID dictionaries, and parallel
coloring/ghost sets from `Mesh` plus their helpers.
- Introduce `surface_topology(::Type{<:AbstractTopology})` for Tet/Hex volumes
and guard `extract_surface` with `hasmethod` errors for unsupported solids.
- Remove `create_node_set_from_element_set!` (surface workflows should build sets
explicitly or use topology-aware helpers later).
- Document that `extract_surface` still assumes the first `nnodes(FaceT)` nodes
per volume element describe the boundary patch.
Document that multi-topology meshes are still unsupported and replace the old
`Physics` wording with kernel-centric language about shared meshes.
- Swap the future `MixedMesh` bullet for an explicit limitation note.
- Describe mesh ownership vs kernel references for multiphysics reuse.
Replace marketing-heavy prose with a short map of the active files, the
parametric `Mesh{N,T}` role, refinement usage, and where import/tests live now.
- Drop duplicated API inventories and speculative future-work bullets.
- Point readers at `src/io/` for ingest and `llm/design/legacy-tests/mesh/` for
retired parallel/coloring coverage.
Replace abstract type definition with comment pointing to canonical definition in mesh/api.jl.
Eliminates documentation replacement warning while preserving single source of truth for refinement strategy hierarchy.
Remove positional argument constructor that duplicated keyword constructor functionality. This eliminates method overwrite warning.
Kept only the keyword constructor which provides clearer API:
- mesh = Mesh{Hex8}(nodes, conn; element_sets=..., node_sets=...)
The keyword version is more explicit and prevents accidental parameter ordering mistakes.
- Introduce AbstractRefineStrategy and LongestEdgeBisection
- Split Hex8 elements per axis with midpoint deduplication
- Preserve mesh metadata while iterating refinement levels
- Create general box mesher with boundary node/element sets
- Provide convenience wrappers for unit cubes, cantilevers and thin plates
- Document usage examples for convergence and application setups
- Generate Tri3 rings parameterized by radius, radial and angular counts
- Populate connectivity for central fan and radial bands
- Define default node/element sets for center and outer boundary conditions
- Define Mesh{N,T} structure with validated connectivity and sets
- Provide APIs for node/element lookup, colors, ghost ownership and IDs
- Implement permutation, adjacency and utility helpers for assembly workflows
Create src/mesh/api.jl defining mesh-specific abstractions:
- AbstractMesh base type for all mesh structures
- nnodes_total(), nelements() for mesh sizing
- get_node(node_id) returns Vec{Dim} coordinates
- connectivity_matrix() returns element-to-nodes mapping
- get_elements_for_node(node_id) returns node-to-elements mapping (critical for nodal assembly)
- get_element_set(name), get_node_set(name) for named sets (BCs, materials, postprocessing)
- AbstractRefineStrategy, refine() for adaptive mesh refinement
Meshes own topology (coordinates, connectivity). Multiple Physics can
share one Mesh for multiphysics coupling. Node-to-elements mapping
enables nodal assembly pattern (see docs/book/multigpu_nodal_assembly.md).
Part of systematic modular API architecture.
Current state discovery:
- Element basis function evaluation broken (eval_basis! signature mismatch)
- Field interpolation at integration points broken (same root cause)
- Jacobian evaluation at integration points broken
- These are fundamental API issues affecting multiple test paths
Impact:
- Tutorial 3 (basis functions) deferred until API fixed
- Affects any code trying to evaluate fields at integration points
- Related to Quad4 assembly issues discovered in Tutorial 4
Working tutorials (107/107 tests passing):
- Tutorial 1: Element creation (5 tests)
- Tutorial 2: Gmsh mesh reading (72 tests)
- Tutorial 4: 1-element validation (35 tests)
Next: Focus on tutorials using working APIs only
- Added 118 lines of heat transfer code to src/problems_heat.jl
- Problem types: Heat (3D), PlaneHeat (2D)
- Fields: thermal conductivity, heat source, heat flux, convection
- Fixed Element type signatures (Element{M,B})
- NOTE: Tests currently failing due to element_info! API mismatch
- Will fix after more consolidations (old FEMBase 0.x API)
Result: 9 vendor packages consolidated (~6620 lines total)
Tests: 5 passing baseline maintained (heat tests need API fix)