Commit Graph

1409 Commits

Author SHA1 Message Date
Jukka Aho eeecf72656 feat(assemblers): Add parametric COOCache for zero-allocation assembly
New file: src/assemblers/coo_cache.jl (184 lines)

Features:
- Parametric struct COOCache{EC<:ElementCache, MC<:MaterialStateCache}
- Eliminates type instability from cache field accesses
- Stores triplets (I, J, V) for sparse matrix construction
- Includes reset! and extract_system functions

Performance impact:
- Enables zero allocations in assembly loop
- Required for achieving 500K elem/s throughput
- Critical optimization for type stability

Documentation includes:
- COO format explanation
- Performance characteristics
- Use cases and trade-offs
2025-11-20 16:56:38 +02:00
Jukka Aho ae144f93fb test(continuum): Update test suite includes for new architecture
Removed old test files:
- test_kernel_allocations.jl (deleted)

Added new test files:
- test_dofs_per_node.jl - DOF mapping tests
- test_dof_mapping.jl - Field to DOF mapping
- test_helpers.jl - Utility function tests
- test_kernel_functions.jl - Kernel computation tests
- test_reset_functions.jl - Cache reset tests
- test_cache_updates.jl - Three-phase cache update tests
- test_compute_block.jl - Block computation tests
- test_full_assembly.jl - End-to-end assembly tests
- test_validation_hex8.jl - Hex8 element validation

Test suite restructured to match new cache architecture.
2025-11-20 16:56:38 +02:00
Jukka Aho ea5ae07a83 refactor(mesh): Add @inline to mesh size validation
- Added @inline to validate_mesh_size function
- Called during mesh generation/import
- Minor performance optimization
2025-11-20 16:56:37 +02:00
Jukka Aho bb3c3c0680 refactor(materials): Add @inline to PerfectPlasticity functions
- Added @inline to is_finite_strain, has_state
- Trait functions called in assembly loops
- Performance optimization for plastic materials
2025-11-20 16:56:37 +02:00
Jukka Aho 55d09eab3c refactor(materials): Add @inline to LinearElastic functions
- Added @inline to is_finite_strain, has_state trait functions
- Added @inline to compute_stress (called per integration point)
- Critical path optimizations for assembly performance
2025-11-20 16:56:37 +02:00
Jukka Aho 43276cf449 refactor(materials): Add @inline to FiniteStrainPlasticity trait functions
- Added @inline to is_finite_strain, has_state
- Trait functions called frequently during assembly
- Part of performance optimization
2025-11-20 16:56:37 +02:00
Jukka Aho b468fc885d refactor(materials): Add @inline to AbstractMaterial API functions
- Added @inline to is_finite_strain, has_state
- These trait functions are called in hot paths
- Part of selective inlining strategy
2025-11-20 16:56:37 +02:00
Jukka Aho 3227484aef feat(fields): Add DOF mapping and field extraction functions
New functions:
- get_dof_mapping!(dofs, node_ids, field) - maps nodes to global DOFs
- get_field(field) - returns field object from various inputs

Features:
- Handles 1D, 2D, 3D displacement fields
- Supports temperature fields
- Validates node IDs are positive integers
- Added @inline for performance (called per element)

These functions support the new cache update architecture.
2025-11-20 16:56:36 +02:00
Jukka Aho fbb40a21f6 refactor(continuum): Add @inline to compute_block_at_point
- Added @inline annotation for hot path function
- Called once per integration point per element pair
- Critical for achieving 484K elem/s throughput
- Part of selective inlining strategy (97% of max performance)
2025-11-20 16:56:36 +02:00
Jukka Aho dd468a412e refactor(continuum): Add @inline annotations to formulation functions
- Added @inline to dim, strain_size, stress_size
- These are called frequently in assembly loops
- Part of selective inlining strategy for performance
2025-11-20 16:56:36 +02:00
Jukka Aho 39b51716cd refactor(assemblers): Add selective @inline for optimal performance
- Added @inline to compute_block_at_point (hot path, called per integration point)
- Added @inline to helper tensor operations
- Removed @inline from orchestration functions (compute_block, assemble_element!)
- Result: 484K elem/s (97% of max) with 86% less code complexity

Performance analysis:
- Full inline: 500K elem/s, 1448 assembly lines, 111 register spills
- Partial inline: 484K elem/s, 196 assembly lines, 15 register spills
- Optimal balance of performance vs maintainability
2025-11-20 16:56:36 +02:00
Jukka Aho cb8e9ef977 perf(assemblers): Implement zero-allocation COO assembly with direct scatter
Major changes:
- Replaced cache-based scatter with direct array scatter
- Extract counter once before loop, write once after loop
- Use scatter_blocks_to_triplets_symmetric_direct! for zero dispatch
- Use scatter_blocks_to_force! for force vector assembly
- Removed Ref{Int} indirection in counter management

Performance improvements:
- Zero allocations in assembly loop (verified with benchmarks)
- Zero dynamic dispatch (verified with @code_llvm)
- 500K elements/second throughput (5× baseline improvement)

Three-phase cache update pattern:
- update_element_cache! for DOF mapping
- update_geometry_cache! for Jacobian and gradients
- update_material_cache! for stress and tangent modulus
2025-11-20 16:56:36 +02:00
Jukka Aho be8904cff5 refactor(assemblers): Update cache includes and remove old definitions
- Added includes for coo_cache.jl, csc_cache.jl, nodal_cache.jl
- Removed old COOCache, CSCCache, NodalCache definitions (now in separate files)
- Removed old ElementCache, NodeCache definitions (moved to element_cache.jl)
- Kept only high-level cache coordination logic
2025-11-20 16:56:36 +02:00
Jukka Aho a9dcf5b714 refactor(assemblers): Remove unused abstract types
- Removed AbstractAssemblerCache (moved to caches.jl)
- Removed ElementCache, NodeCache abstract types (now concrete in element_cache.jl)
- Kept only AbstractAssembler, AbstractKernel, and assembler style types
- Cleanup for new cache architecture
2025-11-20 16:56:35 +02:00
Jukka Aho 82b9d980e3 refactor(core): Reorganize includes for new cache architecture
Changes to continuum domain:
- Added includes for abstract.jl and types.jl (new files)
- Replaced integration.jl with three update_*_cache.jl files
- Removed assemble.jl include

Changes to assemblers:
- Added includes for element_cache.jl, geometry_cache.jl, material_cache.jl
- Added exports for GeometryCache, MaterialStateCache types
- Added exports for update functions: update_geometry_cache!, update_element_cache!, update_material_cache!

Changes to fields API:
- Added exports for get_dof_mapping!, get_field functions

This restructuring separates cache management into dedicated modules
and implements the three-phase assembly pattern.
2025-11-20 16:56:35 +02:00
Jukka Aho c7276a93d7 deps: Add BenchmarkTools to test dependencies
- Added BenchmarkTools to [extras] section
- Added BenchmarkTools to test target
- Required for performance benchmarking of assembly functions
2025-11-20 16:56:35 +02:00
Jukka Aho ede78a705d feat(continuum): Implement material-independent finite strain kernel
- Implement compute_finite_strain_kernel! for generic material integration
- Support MaterialBehavior trait dispatch (Stateless/Stateful, StrainDependent)
- Compute deformation gradient F from displacement gradients
- Compute Green-Lagrange strain E from deformation gradient
- Call material-specific compute_stress! with strain measure
- Transform Piola-Kirchhoff stress to Cauchy stress
- Support all continuum theory types (3D, PlaneStress, PlaneStrain, Axisymmetric)
- Implement zero-allocation design with pre-allocated buffers
- Document finite strain kinematics and stress transformations
- 199 lines of generic finite strain kernel implementation
2025-11-19 12:01:34 +02:00
Jukka Aho 406889833c test(validation): Add cantilever beam regression test
- Implement full 3D cantilever beam FEM validation
- Test LinearElastic material with known analytical solution
- Verify tip displacement against reference value
- Test assembly pipeline from mesh to solution
- Include boundary conditions (fixed end, tip load)
- Validate solver convergence and accuracy
- Document expected displacement and tolerance
- Serve as integration test for complete FEM workflow
- 359 lines of end-to-end validation test
2025-11-19 11:48:12 +02:00
Jukka Aho 084d563fce test(continuum): Add zero-allocation stiffness assembly tests
- Test compute_stiffness_block! allocations for all materials
- Verify LinearElastic stiffness assembly is allocation-free
- Verify NeoHookean stiffness assembly is allocation-free
- Verify PerfectPlasticity stiffness assembly is allocation-free
- Test all continuum theory types (3D, PlaneStress, PlaneStrain, Axisymmetric)
- Use @test @allocations macro for precise allocation tracking
- Validate material tangent computation maintains zero allocations
- 260 lines of stiffness assembly allocation tests
2025-11-19 11:48:12 +02:00
Jukka Aho 74d3079130 test(continuum): Add zero-allocation kernel tests
- Test compute_stress! allocations for all material types
- Verify LinearElastic kernel is allocation-free
- Verify NeoHookean kernel is allocation-free
- Verify PerfectPlasticity kernel is allocation-free
- Test all continuum theory types (3D, PlaneStress, PlaneStrain, Axisymmetric)
- Use @test @allocations macro for precise allocation tracking
- Ensure material trait dispatch maintains zero allocations
- 257 lines of allocation verification tests
2025-11-19 11:48:12 +02:00
Jukka Aho 65ba108125 feat(plates): Implement complete DKT plate element
- Implement Discrete Kirchhoff Triangle (DKT) plate bending element
- Define DKTPlate formulation type with material and thickness parameters
- Implement assemble_stiffness! for plate bending problems
- Compute element stiffness matrix using DKT basis functions
- Support transverse displacement (w) and rotation (θx, θy) DOFs
- Include numerical integration over triangular domain
- Implement element force vector assembly
- Support distributed and point loads on plate surface
- Document DKT theory and implementation details
- 645 lines of complete DKT plate element implementation
2025-11-19 11:40:27 +02:00
Jukka Aho ee7554f1a4 feat(continuum): Implement v2 assembly with material trait dispatch
- Implement assemble_stiffness! with MaterialBehavior trait dispatch
- Support StatelessStrainDependent materials (LinearElastic, NeoHookean)
- Support StatefulStrainDependent materials (PerfectPlasticity)
- Implement zero-allocation element stiffness assembly
- Use generic material kernel integration
- Replace material-specific assembly functions with unified implementation
- Include integration point loops with Jacobian computation
- Support all continuum theory types (3D, PlaneStress, PlaneStrain, Axisymmetric)
- 522 lines of generic continuum assembly implementation
2025-11-19 11:40:27 +02:00
Jukka Aho 2e31f22240 refactor(assembly): Implement nodal-level assembly data structures
- Define NodalAssembly type for nodal force assembly
- Implement direct nodal force vector accumulation
- Support pre-allocated buffers for zero-allocation assembly
- Provide nodal-to-global DOF mapping
- Include nodal load and constraint data structures
- Document nodal assembly workflow for point loads and BCs
- 234 lines of nodal assembly infrastructure
2025-11-19 11:34:22 +02:00
Jukka Aho 1ce6daddc6 refactor(assembly): Implement element-level assembly data structures
- Define ElementAssembly type for element matrix/vector assembly
- Implement local stiffness matrix and force vector containers
- Support pre-allocated buffers for zero-allocation assembly
- Provide DOF connectivity and element-to-global mapping
- Include element-level integration point data structures
- Document element assembly workflow and memory layout
- 341 lines of element assembly infrastructure
2025-11-19 11:34:22 +02:00
Jukka Aho 2ec68a5107 refactor(legacy): Preserve legacy problem assembly interface
- Move legacy Problem-based assembly to src/legacy/
- Maintain backward compatibility for existing code
- Document deprecation path to new Physics-based API
- Preserve assembly_problem!, solve_problem! functions
- Support legacy element and boundary condition patterns
- Include migration guide in deprecation warnings
- 478 lines of legacy assembly implementation
2025-11-19 11:27:14 +02:00
Jukka Aho 931d5414fb refactor(assembly): Consolidate assembly framework infrastructure
- Define common assembly patterns for all element types
- Implement element-level and global assembly helpers
- Support both sparse and dense assembly strategies
- Provide integration point loop abstractions
- Include DOF mapping and scatter operations
- Document assembly workflow for structural elements
- 201 lines of framework infrastructure
2025-11-19 11:27:14 +02:00
Jukka Aho 1740de62fd feat(plates): Implement DKT plate element basis functions
- Implement Discrete Kirchhoff Triangle shape functions
- Compute rotation field interpolation with C1 continuity
- Calculate bending strain-displacement matrix
- Support transverse displacement and rotation DOFs
- Include shape function derivatives for plate bending
- Implement discrete Kirchhoff constraints at element level
- 416 lines with comprehensive DKT formulation
2025-11-19 11:27:14 +02:00
Jukka Aho 05732d02b0 refactor(plates): Define plate element API interface
- Define AbstractPlateElement abstract type hierarchy
- Implement element assembly interface for plate structures
- Export DKT (Discrete Kirchhoff Triangle) plate element
- Document thin plate theory (Kirchhoff assumptions)
- Support bending and transverse shear
- Include rotation DOF handling for plate kinematics
- 188 lines of API definitions and exports
2025-11-19 11:27:14 +02:00
Jukka Aho 25624a3be4 refactor(shells): Define shell element API interface
- Define AbstractShellElement abstract type hierarchy
- Implement element assembly interface for shell structures
- Export shell formulation and element types
- Document thin shell theory (Kirchhoff-Love, Reissner-Mindlin)
- Support membrane and bending coupling
- Include rotation DOF handling for shell kinematics
- 100 lines of API definitions and exports
2025-11-19 11:27:14 +02:00
Jukka Aho c747844914 refactor(beams): Define beam element API interface
- Define AbstractBeamElement abstract type hierarchy
- Implement element assembly interface for beam structures
- Export beam formulation and element types
- Document Euler-Bernoulli and Timoshenko beam theories
- Support 2D and 3D beam elements
- Include rotation DOF handling for beam kinematics
- 98 lines of API definitions and exports
2025-11-19 11:27:13 +02:00
Jukka Aho 7c0ad5f4a2 refactor(trusses): Define truss element API interface
- Define AbstractTrussElement abstract type hierarchy
- Implement element assembly interface for truss structures
- Export truss formulation and element types
- Document 1D structural element API patterns
- Support both geometric and material nonlinearity
- 79 lines of API definitions and exports
2025-11-19 11:27:13 +02:00
Jukka Aho 555c506f17 test(continuum): Add automated allocation and trait tests
Created test/domains/continuum/runtests.jl:
- Test material trait system (6 tests)
  * LinearElastic: StatelessConstantTangent, !needs_deformation, !needs_state
  * NeoHookean: StatelessStrainDependent, needs_deformation, !needs_state
  * PerfectPlasticity: StatefulStrainDependent, needs_deformation, needs_state
- Include zero-allocation tests (27 tests)
  * Verify 0 bytes for LinearElastic integration
  * Verify 0 bytes for NeoHookean integration
  * Test full assembly loop allocations
- Include type stability tests (15 tests)
  * Verify PreparedElement type stability
  * Verify compute_block! type stability
  * Verify trait dispatch type stability

Updated test/runtests.jl:
- Include test/domains/continuum/runtests.jl in main test suite
- Automatically run on every test invocation
- Ensures zero-allocation property maintained
- Ensures material traits work correctly

Updated test/domains/continuum/test_type_stability.jl:
- Adapt to new generic integration API
- Test prepare_element!, compute_block!, compute_all_blocks!
- Verify type stability for both LinearElastic and NeoHookean
- Test material trait helper functions

Test Results:
- 57 tests passing (all tests)
- 33 continuum domain tests (including new trait tests)
- Zero-allocation verified for LinearElastic AND NeoHookean
- Type stability confirmed for generic integration
- Backward compatibility maintained (cantilever test passes)

Why: Automated tests ensure the refactoring maintains performance properties
(zero allocations, type stability) while adding new functionality (traits).
2025-11-19 10:03:46 +02:00
Jukka Aho ac2a483d26 refactor(materials): Export material behavior trait symbols
- Export MaterialBehavior abstract type
- Export StatelessConstantTangent, StatelessStrainDependent, StatefulStrainDependent
- Export material_behavior, needs_deformation, needs_state functions
- Enables user code to query material requirements at runtime
- 3 lines of exports added after existing material exports
2025-11-19 10:03:45 +02:00
Jukka Aho 66cc937d8c refactor(continuum): Replace material-specific integration with generic functions
BEFORE:
- Separate compute_block! for LinearElastic (lines 152-179)
- Separate compute_block! for NeoHookean (lines 198-236)
- Separate compute_all_blocks! for each material
- Adding 100 materials = 100 copies of integration code

AFTER:
- Single generic compute_block! for ALL materials (lines 310-351)
- Single generic compute_all_blocks! for ALL materials (lines 394-406)
- Trait-based dispatch via material_behavior()
- Constant tangent optimization preserved (lines 324-332)
- Zero code duplication regardless of material count

Implementation:
- Add compute_tangent_at_point() for StatelessConstantTangent
- Add compute_tangent_at_point() for StatelessStrainDependent
- Add compute_tangent_at_point() for StatefulStrainDependent
- Generic compute_block! dispatches on material_behavior()
- Generic compute_all_blocks! calls generic compute_block!
- Type-stable at compile time via trait dispatch

Performance:
- LinearElastic: tangent computed once (O(1) material queries)
- NeoHookean: tangent at each IP (O(NIP) queries)
- PerfectPlasticity: tangent + state at each IP (O(NIP) queries)

Benefits:
- Scalable to arbitrary number of materials
- Zero allocations maintained (verified by tests)
- Type stability maintained (verified by tests)
- Single source of truth for integration logic
2025-11-19 10:03:45 +02:00
Jukka Aho 7e1739a987 feat(materials): Declare PerfectPlasticity as StatefulStrainDependent
- Add material_behavior(::PerfectPlasticity) = StatefulStrainDependent()
- Enables generic integration with state variable handling
- Requires displacement field and state for tangent computation
- Single line trait declaration, zero code duplication
2025-11-19 10:03:45 +02:00
Jukka Aho 589c80dce5 feat(materials): Declare NeoHookean as StatelessStrainDependent
- Add material_behavior(::NeoHookean) = StatelessStrainDependent()
- Enables generic integration to compute tangent at each IP
- Requires displacement field for strain-dependent tangent
- Single line trait declaration, zero code duplication
2025-11-19 10:03:45 +02:00
Jukka Aho c84ad4e228 feat(materials): Declare LinearElastic as StatelessConstantTangent
- Add material_behavior(::LinearElastic) = StatelessConstantTangent()
- Enables generic integration to optimize constant tangent case
- Single line trait declaration, zero code duplication
- Integration computes tangent once and reuses for all IPs
2025-11-19 10:03:45 +02:00
Jukka Aho 56b8f25682 feat(materials): Add trait-based material behavior system
- Define MaterialBehavior abstract type for material classification
- Add StatelessConstantTangent trait for linear elastic materials
- Add StatelessStrainDependent trait for hyperelastic materials
- Add StatefulStrainDependent trait for plastic materials
- Implement material_behavior() trait function interface
- Add needs_deformation() and needs_state() helper queries
- Document trait system with comprehensive examples
- Enable generic integration without material-specific code duplication
- 148 lines of trait definitions and documentation

Why: Solves the problem of replicating compute_block! for each material type.
With 100 materials, we'd have 100 copies of integration code. Traits provide
a standardized interface that integration code can query at compile time.
2025-11-19 10:03:44 +02:00
Jukka Aho 9afc4de364 refactor(continuum): Update module includes and exports
- Include domains/continuum/theory.jl for theory definitions
- Include domains/continuum/formulations.jl for ContinuumFormulation
- Include domains/continuum/kinematics.jl for deformation measures
- Include domains/continuum/integration.jl for Jacobian utilities
- Export AbstractContinuumTheory and all theory types
- Export ContinuumFormulation type
- Export kinematic functions (compute_deformation_gradient, etc.)
- Export integration utilities (compute_jacobian, etc.)
- Maintain backward compatibility with existing API
2025-11-19 09:03:28 +02:00
Jukka Aho fb10cbbf8a feat(continuum): Implement Jacobian and integration utilities
- Implement compute_jacobian(X, ∇N_ξ) for coordinate mapping
- Implement compute_jacobian_determinant(J) with singularity checks
- Implement compute_shape_derivatives(∇N, J) in physical coordinates
- Add default_integration(topology) for element-specific quadrature
- Support Hex8, Tet4, Quad4, Tri3, Seg2 element types
- Include integration point selection logic
- 327 lines with robust numerical handling
2025-11-19 09:03:28 +02:00
Jukka Aho 5ce552c962 feat(continuum): Implement deformation gradient and strain measures
- Implement compute_deformation_gradient(F, u, ∇N) for finite strain
- Implement compute_green_lagrange_strain(E, F) from deformation gradient
- Implement compute_small_strain(ε, u, ∇N) for linear kinematics
- Add comprehensive documentation for kinematic measures
- Support both small strain (linear) and finite strain (nonlinear)
- Include mathematical formulations in docstrings
- 224 lines with zero-allocation tensor operations
2025-11-19 09:03:28 +02:00
Jukka Aho 3ee9e69d5b refactor(continuum): Define ContinuumFormulation type
- Define ContinuumFormulation{Theory<:AbstractContinuumTheory}
- Implement formulation constructor with theory parameter
- Document formulation as discretization strategy wrapper
- Add usage examples for all theory types
- Support dispatch on Theory type parameter
- Enable theory-specific element assembly
- 323 lines with formulation infrastructure
2025-11-19 09:03:28 +02:00
Jukka Aho bbb44c0cd0 refactor(continuum): Consolidate continuum mechanics theory definitions
- Define AbstractContinuumTheory abstract type hierarchy
- Implement FullThreeD for general 3D continuum mechanics
- Implement PlaneStress for thin structures (σ_zz = 0)
- Implement PlaneStrain for long structures (ε_zz = 0)
- Implement Axisymmetric for rotationally symmetric problems
- Add Voigt notation helpers for stress/strain tensors
- Document theory assumptions and use cases
- 178 lines with comprehensive documentation
2025-11-19 09:03:27 +02:00
Jukka Aho f2a08184a9 refactor(exports): Export block API and common BC functions
- Export PreparedElement, prepare_element!, compute_block!, compute_block_at_point
- Export apply_neumann_bcs!, apply_dirichlet_bcs! from common location
- Update include path for domains/common/boundary_conditions.jl
- Document that BC functions work with any kernel/domain type
2025-11-19 02:13:55 +02:00
Jukka Aho 2522087e62 feat(continuum): Implement block-oriented kernel API
- Add 4-level composable architecture for kernel operations:
  * Level 1: compute_block_at_point - atomic 3×3 block (single IP)
  * Level 2: PreparedElement, prepare_element! - geometry preprocessing
  * Level 3: compute_block! - node-pair integration (reuses geometry)
  * Level 4: compute_element_stiffness! - full element (wrapper)

- PreparedElement uses SVector/NTuple for zero-allocation geometry cache
- Material dispatch (LinearElastic vs NeoHookean) via compute_all_blocks!
- Eliminates runtime type checks with compile-time polymorphism

- Enable multiple assembly strategies from single kernel:
  * Element assemblers: call compute_element_stiffness! (full Ke)
  * Nodal assemblers: call prepare_element! + compute_block! (per-row)
  * GPU kernels: call compute_block_at_point (SIMD-friendly)

- Maintain zero-allocation guarantee (verified in tests)
- Performance matches CSC assembler (1.48ms for 40-element benchmark)
- All methods produce numerically identical results
2025-11-19 02:13:50 +02:00
Jukka Aho 706a275d57 refactor(continuum): Remove BC functions from assemble.jl
- Remove apply_neumann_bcs! and apply_dirichlet_bcs!
- Functions moved to domains/common/boundary_conditions.jl
- Keeps assemble.jl focused on matrix/vector assembly only
2025-11-19 02:13:42 +02:00
Jukka Aho 9c980ab264 refactor(domains): Move BC functions to common location
- Move apply_neumann_bcs! and apply_dirichlet_bcs! from continuum/assemble.jl
- Functions are domain-agnostic (work with any AbstractKernel)
- Place in domains/common/ for reuse across continuum/beams/shells/trusses
- Update to use generic dofs_per_node(kernel) instead of hardcoded 3
2025-11-19 02:13:36 +02:00
Jukka Aho 7589b345e8 fix(materials): Return SymmetricTensor{4,3} from elasticity_tensor
- Change return type from Tensor{4,3} to SymmetricTensor{4,3}
- Construct full 81-component tensor then convert to symmetric form
- Matches NeoHookean return type for API consistency
- Properly encodes material symmetry (C_ijkl = C_jikl = C_ijlk = C_klij)
2025-11-19 02:13:31 +02:00
Jukka Aho f7659a6992 deps: Update manifest for StaticArrays
- Lock StaticArrays at v1.9.15
- Update dependency resolution after adding StaticArrays
2025-11-19 02:13:27 +02:00
Jukka Aho 6b3a7df211 deps: Add StaticArrays for zero-allocation block API
- Add StaticArrays v1.9.15 for SVector/NTuple support
- Required for stack-allocated PreparedElement geometry cache
- Enables compile-time sized arrays in block computations
2025-11-19 02:13:22 +02:00