New test file for DOF extraction functionality:
- Tests extract_element_dofs() function
- Tests extract_element_dofs_structured() function
- Single-field and multi-field test cases
- Type stability verification
Provides test coverage for DOF extraction from global solution vectors.
New comparison example demonstrating:
- Generated DOF extraction vs manual implementation
- Performance comparison
- Code generation benefits
- Type stability advantages
Provides comparison example for DOF system code generation.
New example file demonstrating basic DOF system usage:
- Simple single-field and multi-field element creation
- DOFManager usage
- Element creation workflow
- Basic DOF extraction examples
Provides simple usage examples for the DOF system.
New 205-line DOF system documentation:
- Philosophy: multi-field is fundamental, single-field is special case
- Core concept: DOF{T,E} abstract type for type-level specifications
- Field specifications with @DOFSet macro
- Usage examples for single-field and multi-field elements
- DOFManager and element creation workflow
- DOF connectivity for inverse mapping
- Performance notes and design rationale
Provides complete documentation for the unified DOF system architecture.
New 88-line formulation utilities:
- field_type_for_dispatch(): extract field type from Element's S parameter
- Helper functions for multi-field Element{K,P,S} system
- Works with NamedTuple-based field specifications
- Supports thermoelasticity and other multi-physics couplings
- Already integrated in JuliaFEM.jl (line 500)
Provides utilities for multi-field microkernel assembly with Element{K,P,S} system.
New 83-line microkernel interface:
- evaluate(): compute single scalar contribution to K[i,j] at integration point
- Matrix-free assembly support for DOF-based assemblers
- Multi-physics coupling via type dispatch
- Zero-allocation assembly with precomputed caches
- Default implementation returns 0.0 (no coupling)
- Already integrated in JuliaFEM.jl (line 499)
Provides microkernel architecture for efficient matrix-free assembly.
New 416-line plate element basis system:
- AbstractPlateBasis: base type for plate bending elements
- DKT (Discrete Kirchhoff Triangle): 3-node triangular plate element
- DST (Discrete Shear Triangle): 3-node Mindlin-Reissner plate element
- Non-conforming elements with multiple DOF types per node (w, θx, θy)
- Mixed continuity: C0 deflection, discontinuous rotations
- Kirchhoff constraint enforcement via basis construction
- References: Batoz et al. (1980), Zienkiewicz & Taylor
Provides plate bending element basis functions for structural analysis.
New 88-line material trait system:
- supported_physics(): returns tuple of supported physics types
- required_field_types(): returns tuple of required field types
- required_state_variables(): returns tuple of state variable types
- Type-level dispatch support for @generated functions
- Extensible trait system for material implementations
- Already integrated in JuliaFEM.jl (line 430)
Provides foundation for compositional material trait system.
New 91-line state variable trait system:
- AbstractStateVariable: base type for state variables
- state_variable_type(), default_symbol(): state variable traits
- PlasticStrain, Backstress, EquivalentPlasticStrain: example implementations
- Compositional design: state variables are independent building blocks
- Already integrated in JuliaFEM.jl (line 425)
Provides extensible state variable system for material state management.
New 62-line LocalField structure:
- LocalField{T,G,R,GR}: field quantities at a point (value, gradient, rate, gradient_rate)
- Unified dynamic and quasi-static treatment (quasi-static: rate=0)
- Supports field values, spatial gradients, time derivatives, gradient rates
- Used for material evaluation at integration points
- Already integrated in JuliaFEM.jl (line 141)
Provides comprehensive field data structure for material constitutive evaluation.
New 527-line field interpolation system:
- interpolate_fields(): interpolate all fields and gradients at reference point
- interpolate_field(): interpolate single field
- interpolate_field_value(): interpolate field value only
- Supports scalar and vector fields with gradients
- Zero-allocation @generated function for type stability
- Returns NamedTuple with field values and gradients
- Already integrated in JuliaFEM.jl (line 354)
Provides comprehensive field interpolation for material evaluation at integration points.
New 122-line DOF extraction system:
- extract_element_dofs(): extract element DOFs as flat tuples from global vector
- extract_element_dofs_structured(): extract as NamedTuple with field names
- Zero-allocation @generated function for type stability
- Supports single-field and multi-field DOF specifications
- Already integrated in JuliaFEM.jl (line 353)
Provides efficient DOF extraction for element-level operations.
New 362-line material cache system:
- GlobalMaterialCache{StateType}: stores state variables at all IPs/elements
- material_state_type(): infer state NamedTuple type from material traits
- create_global_material_cache(): factory function with automatic type inference
- create_zero_state(): zero-initialize state NamedTuples
- Supports stateless (empty NamedTuple) and stateful materials
- Type-stable NamedTuple-based storage
- Zero-allocation state updates (functional style)
- Already integrated in JuliaFEM.jl (line 437)
Provides persistent state storage for time-stepping and material state management.
New 140-line material field trait system:
- required_material_fields(): define fields required by physics (Elasticity, Thermal)
- material_field_type(): infer field NamedTuple type from material's supported physics
- compose_field_types(): compose multiple NamedTuple types for multi-physics
- Supports Elasticity (σ, 𝔻) and Thermal (q, k) physics
- Type-stable field type inference
- Already integrated in JuliaFEM.jl (line 431)
Provides compositional field design for material-physics coupling.
New 43-line download utility:
- abaqus_download(): download Abaqus models from internet
- Uses environment variables: ABAQUS_DOWNLOAD_URL, ABAQUS_DOWNLOAD_DIR
- Checks if file already exists before downloading
- Supports dry-run mode for testing
- Required by AbaqusReader module for example model downloads
Provides utility for downloading Abaqus example models from documentation.
New 68-line surface element creation:
- create_surface_element(): create surface elements from solid element faces
- element_mapping: mapping table for element face → surface element topology
- Supports Tet4→Tri3, Tet10→Tri6, Hex8→Quad4, Hex20→Quad8, Wedge6→Quad4/Tri3
- Maps Abaqus surface definitions to JuliaFEM element types
- Required by abaqus_reader.jl for boundary condition application
Provides surface element extraction from Abaqus .inp file surface definitions.
New 347-line Abaqus model parser:
- Model, Mesh, Material, Elastic, Step, BoundaryCondition, OutputRequest types
- AbaqusReaderState: parsing state machine
- parse_model(): parse full ABAQUS .inp files (mesh + BCs + loads + steps)
- Keyword registration system integration
- Section parsing: SOLID_SECTION, MATERIAL, ELASTIC, STEP, BOUNDARY, CLOAD, DLOAD
- abaqus_read_model(): read complete model vs abaqus_read_mesh() for mesh only
- Required by AbaqusReader module for full model parsing
Provides complete Abaqus .inp file model parsing with boundary conditions and load steps.
New 24-line keyword registration system:
- register_abaqus_keyword(): register keywords for section parsing
- is_abaqus_keyword_registered(): check if keyword is registered
- Global registry for ABAQUS .inp file keywords
- Required by parse_model.jl for section parsing
Provides keyword registration infrastructure for AbaqusReader module.
New 495-line DOF management system:
- DOFManager: manages global DOF numbering across mesh entities
- register_fields!(): register fields from DOFSet specifications
- allocate_dofs!(): allocate DOFs for entities (supports multi-field)
- get_node_dofs(): retrieve DOF indices for nodes
- count_field_dofs(): count total DOFs for specific field
- count_entities(): count mesh entities by type (Vertex, Edge, Face, Cell)
- create_elements!(): create elements with DOF assignment
- Supports heterogeneous multi-field specifications
- Builds DOF connectivity during element creation
- Already integrated in JuliaFEM.jl (line 577)
Provides global DOF numbering and element creation infrastructure.
New 95-line file for mixed/coupled DOF systems:
- MixedDOF{DOFs}: composition of multiple entity-based DOF types
- Helper functions: is_mixed(), get_dof_types(), num_fields(), get_field_dof_type()
- Support for Stokes (velocity+pressure), 3-field formulations, Taylor-Hood
- DOF ordering: concatenated in field order
- Display formatting for mixed DOF types
Enables mixed interpolation methods with different DOF types per field.
New 169-line file with convenience types and helpers:
- ScalarDOF{E}: type alias for scalar DOFs at entities
- VectorDOF{D,E}: type alias for D-dimensional vector DOFs
- TensorDOF{D,E}: type alias for tensor DOFs
- Convenience constructors for common DOF patterns
- Helper functions for entity-based DOF operations
Provides convenient type aliases for common DOF patterns using entity-based system.
New 396-line field specification system:
- @DOFSet macro for clean multi-field syntax
- ndofs(): compute total DOFs for field specifications
- field_ndofs(): count DOFs per field
- field_names(), field_count(), is_single_field(): field queries
- quantity_type(), entity_type(): extract field components
- single_field(): convert single-field DOFSet to DOF type
- Support for single-field and multi-field specifications
- Comprehensive documentation with examples
Implements unified multi-field architecture where single-field is special case.
New 230-line API file defining DOF system foundation:
- AbstractDOF: base type for all field specifications
- DOF{T,E}: abstract type for type-level field specs (never instantiated)
- DOFSet: type alias for multi-field specifications (currently NamedTuple)
- dof_size(): utility for counting DOF components (Float64, Vec, Tensor, etc.)
- @DOFSet macro support for clean multi-field syntax
- Comprehensive documentation with examples
- Type-level, compile-time resolved (no runtime overhead)
Provides foundation for unified multi-field DOF system.
New 40-line main entry point for DOF system:
- Includes api.jl (DOF{T,E} abstract type)
- Includes fields.jl (field specification system)
- Documents multi-field philosophy (single-field is special case)
- Defines module structure and dependencies
- Already integrated in JuliaFEM.jl (line 313)
Provides unified type-level field specification system for finite elements.
New 197-line module for DOF field information:
- DOFFieldInfo struct: field, entity, component, node index
- decode_local_dof(): decodes local DOF indices to field/entity/component
- Supports single-field and multi-field DOF specifications
- Helper functions: flatten_dof_indices, fill_dof_buffer!
- Zero-allocation buffer operations
- Required dependency for dof_based_coo.jl
Enables DOF-based assembly to decode which field/entity/component each DOF represents.
New 37-line scatter function for element-based force assembly:
- Scatters element force vector to global force vector in-place
- Zero-allocation guarantee (modifies global vector directly)
- Legacy format support
- Required dependency for element_based_coo.jl
Provides core force scattering functionality for COO assembly.
New 63-line scatter function for element-based COO assembly:
- Scatters element stiffness matrix to triplet arrays (I, J, V)
- In-place operation with zero-allocation guarantee
- Capacity checking to prevent overflow
- Required dependency for element_based_coo.jl
Provides core scattering functionality for COO format assembly.
New 219-line documentation file explaining:
- Ciarlet's finite element triple (K, P, Σ) and computational implementation
- Element structure with type-stable @generated constructor
- Field specifications for single and multi-field elements
- DOF extraction strategies (flat and structured)
- Local-global DOF mapping for coupled multi-field assembly
- Performance notes showing zero-allocation achievement (5.5 ns)
Documents the Element{K,P,S,N} type and its zero-allocation design philosophy.
New 536-line documentation file describing:
- Purpose and responsibility of each src/ subdirectory
- Module dependency order and include structure
- Directory health status with action items
- Cleanup plan for dead code and duplicates
- Design principles and future architecture roadmap
Documents all active modules (topology, basis, quadrature, mesh, materials,
assemblers, domains, solvers, physics, etc.) and identifies legacy/duplicate
code that needs cleanup.
Removed verbose documentation sections:
- Removed extensive theory documentation (yield function, flow rule, hardening law, consistency condition)
- Removed detailed algorithm step-by-step explanations (radial return mapping)
- Removed type hierarchy, construction examples, and derived properties
- Removed performance notes and timing information
- Removed detailed function documentation with algorithm steps
Simplified docstrings to essential information about material parameters and function signatures.
Removed verbose documentation sections:
- Removed detailed theory explanations and strain energy formulas from module docstring
- Removed type hierarchy, properties, and construction examples
- Removed detailed function documentation with usage examples
- Removed performance notes and automatic differentiation explanations
- Removed stress conversion formulas and notes
Simplified docstrings to essential formulas (strain energy, stress computation) and function signatures.
Removed verbose documentation sections:
- Removed detailed theory explanations and formulas from module docstring
- Removed type hierarchy and properties sections
- Removed usage examples from function docstrings
- Removed performance notes and implementation details
- Simplified docstrings to essential formulas (Hooke's law, elasticity tensor)
Kept core mathematical formulas and function signatures.
Removed verbose documentation sections:
- Removed detailed theory references (Simo & Hughes)
- Removed algorithm step-by-step explanations
- Removed performance notes and timing information
- Removed detailed field descriptions and invariants
- Simplified docstrings to essential information about fields and function signatures
Kept core information about multiplicative decomposition and material parameters.
Removed extensive documentation from material API docstrings:
- Removed detailed interface requirements sections
- Removed type hierarchy explanations
- Removed design philosophy sections
- Removed usage examples and 'See Also' references
- Kept only essential type and function descriptions
This simplifies the API documentation while maintaining core information
about material types and their behavior traits.
Replace monolithic Physics struct and boundary condition types with
simpler physics category types used for trait-based dispatch.
- Remove Physics struct (Formulation, Field, Mesh, Material coupling)
- Remove DirichletBC and NeumannBC boundary condition storage types
- Remove Constraint type
- Add Elasticity{Dim} and Thermal{Dim} physics category types
- Add required_field_type trait function for physics-to-field mapping
- Simplify to type tags for material trait dispatch
- Support compile-time field type inference from physics
- Align with new architecture: physics types are dispatch tags, not problem containers
Replace monolithic PlasticityState struct with compositional NamedTuple
state system and add new material trait system support.
- Remove PlasticityState struct (now using NamedTuple composition)
- Add supported_physics trait (Elasticity{3})
- Add required_state_variables trait (PlasticStrain, Backstress, EquivalentPlasticStrain)
- Change compute_stress to use NamedTuple for state_old and state_new
- Use get() with defaults for state extraction (handles empty initial state)
- Update state creation to use NamedTuple syntax (ε_p, α, κ)
- Remove state_type trait (replaced by required_state_variables)
Update LinearElastic to support new material trait system and
compositional state design with NamedTuple instead of Nothing.
- Add supported_physics trait (Elasticity{3})
- Add required_state_variables trait (empty tuple for stateless)
- Change state_old parameter to Union{Nothing,NamedTuple}
- Return NamedTuple() instead of nothing for state update
- Support compositional state system in compute_stress