Optional mesh and VTK stacks load only via weakdeps so the default install
stays slim while readers remain available for examples and tests.
- Add weakdeps Gmsh and WriteVTK with JuliaFEMGmshExt and JuliaFEMWriteVTKExt
- Pin Gmsh compat 0.3 and WriteVTK 1.21.2; add WriteVTK to extras and tests
- Refresh Manifest project_hash and JuliaFEM extension entries
Runtime `[deps]` no longer pull in mesh tooling or dev-formatting stacks,
while CSV is available for lightweight tabular I/O and Aqua can run as part
of the standard test target.
- `Project.toml`: drop `BenchmarkTools`, `Gmsh`, and `JuliaFormatter` from `[deps]`; add `CSV` with `[compat]` entries `CSV = "0.10"` and `Aqua = "0.8"`; remove `Gmsh`/`JuliaFormatter` compat pins while keeping `BenchmarkTools` for extras-only use
- `Project.toml`: trim `[extras]` to packages still referenced by tests (add `Aqua`, drop unused entries such as `Documenter`, `ForwardDiff`, `HDF5`, `LightXML`, duplicate stdlib listings) and extend `[targets].test` with `Aqua` while removing `Gmsh`
- `Manifest.toml`: refresh `project_hash` and JuliaFEM stanza so the resolved tree matches the slimmer direct deps, pruning the `gmsh_jll`/`JuliaFormatter`/`BenchmarkTools` transitive closure and recording the CSV dependency subgraph (e.g. `Tables`, `Parsers`, `TranscodingStreams`)
Add LinearOperators dependency (v2.11.0) to support matrix-free
Krylov subspace methods (GMRES) in Newton-Krylov solver framework.
Also reorganize Project.toml sections: move [weakdeps] and [extensions]
after [compat] for better readability.
- [weakdeps] CUDA package for optional GPU support
- [extensions] JuliaFEMCUDAExt loaded when 'using CUDA'
- Zero overhead when CUDA not loaded
- Enables GPU acceleration without mandatory dependency
RESEARCH QUESTION: Should JuliaFEM use hand-calculated derivatives or AD?
Created comprehensive benchmark comparing:
- Manual: Hand-calculated derivatives (traditional FEM)
- AD: Tensors.jl gradient() (automatic differentiation)
RESULTS (AMD Ryzen 9, Julia 1.12.1):
- Manual: 8.7 ns, 0 allocations
- AD: 268.1 ns, 0 allocations
- AD is 30× SLOWER than manual
KEY FINDINGS:
✅ Both achieve zero allocations (Tensors.jl is well-optimized)
❌ AD has 30× compute overhead from dual number arithmetic
⚠️ In assembly loops: millions of calls = 10+ seconds extra per solve
RECOMMENDATION:
- Keep manual derivatives for common elements (Tet10, Hex8, Quad4, etc.)
- Use AD for prototyping and rare elements
- Unit test manual vs AD to catch errors
- Future: Generate derivatives symbolically (Symbolics.jl)
WHY NOT AD EVERYWHERE?
Assembly is hottest path in FEM. 30× overhead = unacceptable for
production code. Users will notice the performance difference.
WHY NOT ABANDON AD?
- Excellent for prototyping
- Required for exotic bases (NURBS)
- Perfect for unit testing manual derivatives
- Zero allocations impressive
Files:
- benchmarks/tet10_derivatives_benchmark.jl (runnable benchmark)
- docs/benchmarks/shape_function_derivatives_ad_vs_manual.md (analysis)
Dependencies added: BenchmarkTools
This answers the research question definitively with data.
Current state discovery:
- Element basis function evaluation broken (eval_basis! signature mismatch)
- Field interpolation at integration points broken (same root cause)
- Jacobian evaluation at integration points broken
- These are fundamental API issues affecting multiple test paths
Impact:
- Tutorial 3 (basis functions) deferred until API fixed
- Affects any code trying to evaluate fields at integration points
- Related to Quad4 assembly issues discovered in Tutorial 4
Working tutorials (107/107 tests passing):
- Tutorial 1: Element creation (5 tests)
- Tutorial 2: Gmsh mesh reading (72 tests)
- Tutorial 4: 1-element validation (35 tests)
Next: Focus on tutorials using working APIs only
Infrastructure improvements:
1. GitHub Actions CI workflow:
- Test on Julia 1.10 (LTS) and latest stable
- Ubuntu Linux runner
- Code coverage via Codecov
2. Documentation build workflow:
- Builds on push to master/main and PRs
- Uses Documenter.jl with GitHub Pages deployment
3. Fix missing exports for tests:
- Add Statistics to test dependencies
Tests still have API mismatches (49 failures) but infrastructure is now
- Add Tensors and Calculus to Project.toml dependencies
- Add basis includes to src/JuliaFEM.jl (Phase 1 integration)
- Fix FEMBasis. namespace references → use JuliaFEM namespace
- Update create_basis.jl: AbstractBasis (not FEMBasis.AbstractBasis)
Status: Basis files load, but conflict with FEMBase expectations
Next: Need to consolidate FEMBase or work around AbstractElement type constraints
This is expected during consolidation - we're bridging two systems.
- Update FEMSparse UUID to match vendor package
- Add InterfaceMechanics dependency (from vendor)
- Reformat author/version lines (Pkg auto-format)
Auto-generated by Julia Pkg during development session.