mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-09-12 22:33:19 +00:00
5141fd6de5
- Moved docs/theory/lagrange_basis_functions.md → src/lagrange_basis_functions.md - Updated all references in scripts and source files - Using lowercase for consistency (no uppercase in filenames) - Documentation now under src/ for automated doc generation Rationale: Documentation should be close to implementation and follow consistent naming conventions (lowercase).
3.4 KiB
3.4 KiB
JuliaFEM Scripts
This directory contains development and code generation scripts for JuliaFEM.
Basis Function Generation
generate_lagrange_basis.jl
Purpose: Pre-generate all Lagrange basis functions for standard finite elements.
Why Pre-generate?
- Fast loading: No symbolic math at package load time (100+ ms → 0 ms)
- Full precompilation: Remove
__precompile__(false)restriction - Readable code: Generated code is easy to debug and understand
- Version control: Changes to mathematics show up in git diffs
- Reproducible: Same input always produces same output
When to Run:
- Adding new element types (Seg2, Tri3, Hex20, etc.)
- Fixing bugs in generation logic
- Changing polynomial ansatz strategy
- After modifying
src/basis/lagrange_generator.jl
Usage:
cd /path/to/JuliaFEM.jl
julia --project=. scripts/generate_lagrange_basis.jl
Output:
src/basis/lagrange_generated.jl(commit this file!)
Theory:
See src/lagrange_basis_functions.md for mathematical foundation.
Architecture:
src/basis/lagrange_generator.jl
│
│ (symbolic engine - uses symbolic differentiation)
│
↓
scripts/generate_lagrange_basis.jl
│
│ (orchestration - defines all element types)
│
↓
src/basis/lagrange_generated.jl
│
│ (clean Julia code - no eval, fully precompilable)
│
↓
src/JuliaFEM.jl includes generated file
Generated Elements:
| Dimension | Linear | Quadratic | Higher |
|---|---|---|---|
| 1D | Seg2 | Seg3 | - |
| 2D Tri | Tri3 | Tri6 | - |
| 2D Quad | Quad4 | Quad8, Quad9 | - |
| 3D Tet | Tet4 | Tet10 | - |
| 3D Hex | Hex8 | Hex20, Hex27 | - |
| 3D Pyramid | Pyr5 | - | - |
| 3D Wedge | Wedge6 | Wedge15 | - |
Total: 15 element types covering all standard Lagrange families.
Performance Impact:
- Before: 150+ ms at package load (symbolic math for each element)
- After: < 1 ms (just include pre-generated file)
- Speedup: ~150× faster package loading
Workflow:
- Edit element catalog in
scripts/generate_lagrange_basis.jl - Run generation script
- Review
src/basis/lagrange_generated.jl - Run tests:
julia --project=. -e 'using Pkg; Pkg.test()' - Commit both files:
git add scripts/ src/basis/lagrange_generated.jl
Example: Adding Hex64 (Triquartic)
# In scripts/generate_lagrange_basis.jl, add to element catalog:
push!(elements, (
name = "Hex64",
description = "64-node triquartic hexahedral element",
coordinates = [
# ... 64 nodes (corners + edges + faces + volume)
],
ansatz = [
:(1), :(ξ), :(η), :(ζ), # ... up to ξ³η³ζ³
]
))
Then regenerate:
julia --project=. scripts/generate_lagrange_basis.jl
The new Hex64 type will be automatically available in JuliaFEM!
Future Scripts (Planned)
benchmark_suite.jl
Run comprehensive performance benchmarks.
validate_against_reference.jl
Compare JuliaFEM results to Code Aster/ABAQUS.
generate_element_matrices.jl
Pre-compute stiffness matrices for simple elements.
See also:
src/lagrange_basis_functions.md- Mathematical theorysrc/basis/lagrange_generator.jl- Symbolic generation enginellm/VISION_2.0.md- Overall project architecture