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.
Bring module prose in line with flat `dof_indices`, `@DOFSet`, and DOFHandler-era
helpers while tightening compile-time DOF arithmetic.
- Refresh docstrings: drop markdown bold noise; document `element_dofs` /
`field_dof_range` instead of NamedTuple-shaped `dof_indices` accessors.
- Rewrite examples to prefer `@DOFSet`; spell out NamedTuple equivalence and drop
Tuple-based migration snippets incompatible with DOFHandler.
- Implement `field_ndofs(::Type{<:DOF}, Topo)` / `ndofs(::DOFSet, Topo)` using
`quantity_type` / `entity_type` and generator-style sums over `fieldtypes(S)`.
- Extend `quantity_type(::Type{<:DOF})` for raw `Float64`, `Vec`, `Tensor`, and
`SymmetricTensor` fields alongside `AbstractField` wrappers.
- Allow `field_ndofs` on raw-quantity DOFs by sizing `T` directly (pressure on
cells/faces, etc.).
- Remove `single_field` compatibility helper and duplicate element accessors now
canonical in `src/elements/elements.jl`.
- Point LICENSE header at LICENSE.md.
Drop ScalarDOF/VectorDOF/TensorDOF aliases and canned Lagrange-* constants that
duplicated patterns now expressed via `DOF{Q,E}` and `@DOFSet`.
- Eliminates Vec{1}-based scalar alias layering in favor of explicit quantities.
- Removes unused LagrangeHeat/LagrangeElasticity shorthand blocks tied to old tutorials.
Delete the legacy global numbering implementation that stored DOFs in Dicts and
registered Tuple-shaped field specs at runtime.
- Remove `mutable struct DOFManager` with `node_to_dofs`, `field_specs`, mesh
reference, and incremental `next_dof` counters at odds with type-stable layouts.
- Drop `register_fields!`, `allocate_dofs!`, `count_field_dofs`, mesh-local
entity counters, and `_assign_element_dofs!` variants tied to that storage.
- Remove `create_elements!` / `_build_dof_connectivity` definitions superseded by
`dof_handler.jl` (`DOFHandler`, `_make_element_dofs`, `build_dof_connectivity`).
- Element-set helpers and BC-oriented accessors live on `DOFHandler` now; the
`DOFManager` identifier remains only as the backward-compatible alias.
Introduce `DOFHandler{M,S,NF}` with flat `field_starts::NTuple{NF,Vector{Int}}`
per field and entity id, optional `facet_maps` for Edge/Face unknowns, running
`total_dofs`, and a `dof_connectivity` slot populated after element creation.
Reserve `DOFManager` as a backward-compatible alias.
Construction and layout:
- Number DOFs in field-declaration order; within each field walk entities in id
order (nodes, cells, or facet ids) using compile-time `dof_size` widths.
- Auto-build `AbstractFacetConnectivityMaps` for Hex8/Hex20/Tet4/Tet10/Wedge6/Pyr5
when the DOFSet references Edge or Face; error on unsupported mesh/topology pairs.
Mixed-field helpers:
- `global_field_ranges` — contiguous global index ranges per declared field,
checked against `handler.total_dofs`.
- `global_facet_dof` — first global DOF for a Face-owned field given facet gid.
- `saddle_point_blocks` / `saddle_point_matrix_blocks` — named views or CSC
subblocks for two-field `u`/`p`-style matrices using those ranges.
Hot path:
- `@generated _make_element_dofs` emits an `NTuple{N,UInt64}` from handler tables:
Vertex via element connectivity, Cell via element id, Edge/Face via
`elem_edge_gid` / `elem_face_gid`; assert emitted length matches `N`.
- `create_elements!` builds the handler, fills `Vector{Element{K,P,S,N}}`, assigns
DOFs with `_make_element_dofs`, then replaces `handler.dof_connectivity` via
`build_dof_connectivity`. Support `Element{K,P,S}` with inferred `N`, and wrap a
bare single `DOF{Q,E}` into a one-field DOFSet.
Legacy-oriented utilities:
- `get_node_dofs` collects Vertex-field DOFs for one node (allocating helper).
- `get_element_ids` resolves ids from `mesh.element_sets` by name or symbol.