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.
Remove the `required_state_variables(::Type{<:AbstractMaterial})` shim that
instantiated materials just to query traits; callers should pass instances or
specialize on concrete types directly.
- Delete the default `required_state_variables(::Type{T}) = …` definition from
`traits.jl`.
Add typed slots for damage equivalent strain, eigenstrain, creep strain, and
indexed Chaboche backstress components so advanced models can declare IP state
without ad hoc symbols.
- Define `DamageEquivalentStrain`, `Eigenstrain`, `CreepStrain`, and
`ChabocheAlpha{N}` with `state_variable_type` / `default_symbol` hooks.
Stop defining `symmetric_identity_tensor` inside `perfect_plasticity.jl` now
that `materials/symmetric_fourth_identity.jl` provides the shared definition.
- Remove `include(\"abstract_material.jl\")`.
- Delete the local `symmetric_identity_tensor` implementation (call sites keep
resolving against the earlier include in `JuliaFEM.jl`).
Expose physics/state-variable traits for hyperelastic assembly and accept
`NamedTuple` IP states alongside `nothing` while sharing one implementation.
- Drop the stale `abstract_material.jl` include.
- Declare `supported_physics` / `required_state_variables` for 3D elasticity.
- Factor `_compute_stress_neo_hookean` and add a `compute_stress` path for
`state_old::NamedTuple`.
- Normalize `where {T}` clauses on public stress APIs.
`AbstractElasticMaterial` already comes from `materials/api.jl`, and IP state
is inferred via `required_state_variables`, so drop the stale include and
`state_type` hook.
- Remove `include(\"abstract_material.jl\")` and redundant trait comments.
- Delete `state_type(::Type{LinearElastic}) = EmptyState`.
Replace the legacy banner with SPDX lines and document how each
`MaterialBehavior` maps to assembly and `GlobalMaterialCache`, dropping the
unused `AbstractMaterialState` / `state_type` surface in favor of
`material_state_type` NamedTuples.
- Switch the file banner to `SPDX-FileCopyrightText` /
`SPDX-License-Identifier: MIT`.
- Remove `AbstractMaterialState`, `EmptyState`, and `state_type`; point readers
at `material_state_type` / `required_state_variables`.
- Enlarge `StatelessConstantTangent`, `StatelessStrainDependent`, and
`StatefulStrainDependent` docstrings with representative models, tangent
caveats, and explicit coverage gaps.
Spell out that SPDX tags must use native comments (`#` in code and TOML,
HTML comments in Markdown/Quarto) and call out formats like JSON that cannot
carry in-file blocks.
- Add an SPDX section with concrete examples and the strict-JSON caveat.
Delete the older compositional cache draft now replaced by
`global_material_cache.jl` + assembler-local workspaces.
- Drop `src/materials/material_cache.jl`.
Remove the unused multiplicative-decomposition J2 sketch that was never wired
into `JuliaFEM.jl` includes.
- Drop `src/materials/finite_strain_plasticity.jl`.
Delete the stale `AbstractMaterial` hierarchy file that duplicated the trait
surface now defined alongside concrete models.
- Drop `src/materials/abstract_material.jl` (unused include target).
Remove the standalone eigen/modal pipeline that was never reached from
`Legacy.jl`.
- Drop `src/legacy/solvers_modal.jl` (problem orchestration + Lanczos hooks).
Remove the plane-stress/strain specialization layer that duplicated the 3D
path but stayed disconnected from `Legacy` includes.
- Drop `src/legacy/problems_elasticity_2d.jl`.
Delete the Dict-based continuum elasticity `Problem` implementation that was
never wired into `Legacy.jl`.
- Drop `src/legacy/problems_elasticity.jl` (assembly over legacy elements).
Remove the mortar-style 3D contact assembly path that lived outside the active
`Legacy` include list.
- Drop `src/legacy/problems_contact_3d.jl` (projection helpers + assembler glue).
Remove the standalone abstract elasticity layer that duplicated concepts now
owned by `src/physics/` and was never included from `Legacy.jl`.
- Delete `src/legacy/physics_api.jl` (`AbstractMesh`, `AbstractMaterial`,
formulation stubs, and helper hooks).
Stop re-exporting `create_surface_elements` from top-level `JuliaFEM`
(which no longer defines it) and bind the compatibility submodule against the
Legacy implementation instead.
- Replace `using JuliaFEM: create_surface_elements` with `import
..create_surface_elements` inside `Legacy.Abaqus`.
Replace unconditional `println` chatter with structured `@info` events so
library callers can filter noise via the standard logging pipeline.
- Log the filename when ingest starts and emit a single summary record with
node/element counts plus physical group keys.
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`.