Rewrite the module README now that Abaqus/Code_Aster stacks live behind the
opt-in Legacy flag and only Gmsh ASCII ingest ships unconditionally.
- Document `JULIAFEM_ENABLE_LEGACY=1` and `src/legacy/io/` for vendor parsers.
- Focus the file list on `gmsh_reader.jl` / `GmshReader` instead of deleted stubs.
- Trim emoji/status tables and stale usage snippets; note roadmap for a native
`.inp` path aligned with `Mesh{T}` / `create_elements!`.
Remove the lightweight HDF5 wrappers around Code_Aster `.rmed` post-processing.
- Drop `RMEDFile`, `aster_read_nodes`, and related helpers from
`src/io/read_aster_results.jl`.
Delete the MED/HDF5 parsing routines that built Dict meshes from Code_Aster
exports.
- Drop `src/io/read_aster_mesh.jl` (`aster_parse_nodes`, connectivity walks,
`aster_read_mesh` glue).
Remove the mutable `Model`/`Mesh` containers and parse helpers that powered the
legacy `.inp` ingestion stack.
- Drop `src/io/parse_model.jl` (material/step/boundary pseudo-types and reader
state machine); identical functionality remains opt-in under `Legacy`.
Delete the hand-rolled `.inp` mesh scanner that mapped Abaqus element codes to
legacy JuliaFEM symbols.
- Drop `src/io/parse_mesh.jl` (element trait tables, node-set parsing, section
dispatch) now duplicated under `src/legacy/io/` behind the opt-in flag.
Remove the mutable global register used by the retired `.inp` parser to tag
top-level keywords.
- Delete `register_abaqus_keyword` / `is_abaqus_keyword_registered` from
`src/io/keyword_register.jl` (Legacy carries its own registration path).
Delete the nested `IO` module that only re-exported the retired Abaqus glue;
the package entry point now includes `gmsh_reader.jl` directly.
- Remove `src/io/io.jl` (SparseArrays/Logging imports and `abaqus_reader`
forwarding).
Drop the Abaqus side-mapping tables and helpers that produced boundary
facets from raw mesh dictionaries.
- Delete `create_surface_element` / `create_surface_elements` and the static
`element_mapping` entry points under `src/io/create_surface_elements.jl`.
Remove the standalone connectivity permutation maps and element-name tables
that wired Code_Aster MED exports into legacy JuliaFEM symbols.
- Drop `src/io/aster_reader.jl` from the default tree (no longer pulled into
`JuliaFEM`).
Delete the thin wrappers that translated `AbaqusReader` output into the
pre-2.0 `Mesh`/`Element` bag-of-fields API.
- Drop `abaqus_read_mesh`, legacy `create_surface_elements`, and nodal-element
helpers from `src/io/abaqus_reader.jl` (superseded by `Legacy` tooling).
Remove `abaqus_download`, which depended on environment-configured URLs and
was only useful for CI/tutorial fetches of vendor `.inp` decks.
- Drop `src/io/abaqus_download.jl`; Legacy retains its own copy when enabled.
Remove the HDF5-backed `AsterReader` wrapper from the default package tree so
the slim IO surface only exposes the maintained mesh ingest path.
- Drop `src/io/AsterReader.jl` (mesh/results includes are no longer shipped here).
Drop the thin `AbaqusReader` wrapper that only forwarded includes into the old
parser stack; opt-in Abaqus ingestion now ships from `Legacy` instead.
- Delete the standalone `src/io/AbaqusReader.jl` entry module (Nullables-era).
Update the SPDX banner to `LICENSE.md` and cross-reference `extract_strain`
from the small-strain docstring so readers know where gradients are consumed.
Bring the inline examples in `compute_jacobian` / `physical_derivatives`
docstrings in line with parametrized reference topologies and `Lagrange{1}`,
and drop a broken cross-reference to external tensor types.
- Point the SPDX banner at `LICENSE.md` on the default branch.
- Use `Triangle{3}` / `Tetrahedron{4}` instances with `Lagrange{1}` in the
derivative snippets.
- Replace the `[Tensor](@ref)` bullet with an explicit note that tensors come
from the **Tensors.jl** dependency.
- Illustrate quadrature iteration from a concrete `Tri3()` topology handle.
Remove the old Dict-/tuple-backed field structs and helpers that lived next
to the modern quantity tags; they duplicated legacy FEMBase concepts and are
not part of the type-stable 0.x surface.
- Delete `DCTI`, `DVTI`, `DCTV`, `DVTV`, `CVTV`, `DVTId`, `DVTVd`, and the
`field` / `interpolate`/`new_field` factories carried in this file.
- Drop `AbstractField` value/container overloads (`length`, `getindex`,
`update_field!`, …) that assumed a `.data` payload on every subtype.
- Keep `AbstractField` definitions and docs in `fields/api.jl`; legacy
variants remain behind `Legacy` where needed (`dcti_dvti_fields.jl`).
Extend the field vocabulary with diffusion/Darcy/mixed facet tags while
making `dofs_per_node` / `quantity_type` expectations explicit and dropping
legacy `Physics(...)` snippets.
- Clarify `dofs_per_node` as components per primary entity (historical name)
and document `quantity_type` as part of the `AbstractField` contract.
- Add `MoistureContent`, `PressurePotential`, `RT0FaceFlux`, and `Nedelec1Edge`
with matching `dofs_per_node` / `quantity_type` hooks.
- Point concrete usage at active kernels and grouped tests; note beam/shell
tags as not wired in the default 0.x build.
- Prefer plain prose over bold emphasis in nearby docstrings.
Consolidate the four `@generated` interpolators onto one Expr toolkit so
scalar/vector branching and flat-DOF indexing stay consistent, and fix the
broken vector arm in `interpolate_field_value`.
- Add compile-time Expr helpers (`_classify_field_quantity`,
`_per_node_dof_exprs`, `_value_expr`, `_grad_expr`, `_field_dof_count`,
`_classify_dofset_field`) shared by `interpolate_fields`,
`interpolate_field`, `interpolate_field_value`, and
`interpolate_local_fields`.
- Fix `interpolate_field_value` vector dispatch: the generated branch
compared `quantity_type` as if it were a type value instead of using the
field quantity from `quantity_type(field_spec)`.
- Refresh module docs (four entry points + helper layering); drop a long
redundant doc example under `interpolate_local_fields`.
Surface the element-as-template table for the DOF-based assembler and make
generated-function helper ordering safe on Julia 1.12+.
- Move `_dof_per_entity`, `_count_entities_compiletime`, and `_compile_time_ndofs`
above all `@generated` users so expansion sees defined bindings.
- Drop `Tuple{Quantity,Entity}` field-spec support; require `DOF{Q,E}` and use
`quantity_type` + `dof_size` without try/catch fallbacks.
- Simplify `ndofs(::Type{K}, ::Type{S})` to sum `_compile_time_ndofs` per field;
remove `nnodes(K())` in favor of `nnodes(K)` on the type.
- Add `DOFLayoutEntry` accessors (`field_idx`, `entity_local`, `component`) and
`@generated local_dof_layout` for Vertex/Cell/Edge/Face fields with length check vs `N`.
- Remove duplicate helper block and stale section dividers; fix LICENSE URL.
Replace outdated NamedTuple dof_indices narrative with flat tuples,
`local_dof_layout`, and `create_elements!` workflows.
- Align examples with `@DOFSet` and multi-field thermo-mechanical setup.
- Document extraction/interpolation entry points and compile-time `field_dof_range`.
- Point readers at dofs/topology/basis/assemblers tests without referencing removed files.
Mirror DOFHandler discipline on interface meshes with Vertex/Cell-only layouts
and inverse connectivity placeholders compatible with volume tooling.
- Build field starts per interface entity id without facet maps yet.
- Hook `create_interface_elements!` for template-specific dof tuples.
Provide multi-field small-strain thermoelasticity with cross blocks between
displacement and temperature using shared geometry SoA caches.
- Dispatch `evaluate_entry` on `field_idx` pairs for `K_uu`, `K_TT`, `K_uT`, `K_Tu`.
- Coupling strength `β` toggles thermal-mechanical interaction; documents additive strain split.
Implement second concrete `AbstractKernel` sharing the DOF-based microkernel
contract with conductivity-focused buffers.
- Support `HeatConductivity`, `MoistureDiffusivity`, `HydraulicConductivity`, and
`ElementWiseScalarDiffusion` pairings with temperature/moisture/pressure fields.
- Cache symmetric second-order tensors per IP; `evaluate_entry` contracts gradients
without displacement-style `(α,β)` branching.
- Add optional `heat_capacity` for consistent thermal mass (`evaluate_mass_entry`)
with zero-cost skip when unset.
- Provide typed constructors that forbid transient flags on steady hydraulic/moisture paths.
Expose steady primal Darcy head formulation as thermal diffusion with
`HydraulicConductivity` and `PressurePotential` fields on shared assembler paths.
Implement vertex displacement + cell pressure coupling with optional bulk
compressibility and indefinite-operator guidance for Krylov usage.
- Weak form matches standard dilatation coupling with `inv_bulk = 1/κ`.
- `evaluate_entry` switches on `field_idx` pairs; shares material tangent path with
continuum kernels for the displacement block.
Provide reusable single-brick mesh factory, symmetry BC constructors, and a
minimal linear-elastic uniaxial solve helper for material calibration tests.
- Builds structured `Hex8` lab meshes via `create_structured_box_mesh`.
- Merges Dirichlet dictionaries safely and documents default Gauss usage.
Add mixed kernel with vertex displacement plus cell-wise strain and stress
unknowns (`eps`, `sig`) for linear `LinearElastic` materials.
- Document discrete block structure (`K_uσ`, `K_εε`, `K_εσ`, …) with Voigt units
matching HR conventions.
- Implement microkernel dispatch across field indices with constant `M`/`G`
matrices precomputed from `C`.
Provide facet-diagonal kernel allocating area/patch contributions per Face unknown
to exercise DOFHandler face numbering and extended evaluate_entry(elem_id).
- Cover Hex8/Hex20/Tet4/Tet10/Wedge6/Pyr5 with physical face area helpers.
- Wire microkernel buffer traits and mass/stiffness evaluators for assembler tests.
Collapse duplicated trait implementations and route everything through the
`GlobalMaterialCache` overload plus explicit material-behavior methods.
- Drop standalone `ElementCache`/`AbstractGeometryCache` copies of constant /
strain-dependent / stateful updaters; rely on `material_behavior` forwarding.
- Import `continuum_kinematics`, `SmallStrainKinematics`, and `GreenLagrangeKinematics`
so stateful updates choose ε versus E via traits instead of ad hoc branches.
- Trim verbose CRITICAL/FIXME commentary while keeping `getfield` guidance for
type-stable workspace access.
- Remove legacy dispatcher taking `Matrix{<:AbstractMaterialState}` state buffers.
- Minor formatting (trailing commas) and docstring refresh on the cache entry.
Align `update_geometry_cache!` with element caches that carry continuum-specific
data and surface scalar basis values needed for mass kernels.
- Remove unused `kernel::AbstractKernel` parameter and narrow `element_cache` to
`ContinuumElementCache`.
- Evaluate `get_basis_functions` each IP, storing `N_data` beside `∇N_data`.
- Rewrite docstring around concrete fields (`X`, `N_data`, `∇N_data`, `detJ_w`)
and zero-allocation guarantees.
Replace outdated Physics/assembly prose with kernel-centric descriptions tied to
`ContinuumKernel`, `HeatKernel`, and the assembler microkernel stack.
- Compress FullThreeD / Axisymmetric narratives and drop stale multi-domain
`Physics(...)` examples.
- Document `ContinuumFormulation{Theory}` as the tag carried by kernels and
point readers at `abstract.jl` / `microkernel.jl` instead of removed assembly paths.