New 588-line comprehensive strategic document explaining winning architecture: Executive Summary (lines 1-19): - Key results demonstrated on real hardware - 9-92× CPU speedup, GPU kernel compilation, MPI working, Krylov convergence - Multi-GPU workflow validated end-to-end Problem: Traditional FEM doesn't scale (lines 21-59): - v0.5.1 limitations: global matrix O(N²) memory, direct solver O(N³) time - Scalability ceiling ~100K DOF - Cannot scale: memory N², time N³ Solution: Nodal + Matrix-Free + Multi-GPU (lines 61-193): - Architecture diagram with MPI ranks and local GPUs - Three pillars: nodal assembly (row-by-row), matrix-free (matvec only), multi-GPU with MPI - Each pillar explained with code examples and advantages Why type stability required (lines 195-241): - GPU kernel compilation: concrete types required, abstract fails - MPI fast path: typed buffers vs slow serialization - Krylov solvers: matrix-free operators need concrete types - Demonstrated with code examples Performance characteristics (lines 243-289): - Complexity analysis: O(N²)→O(N) memory, O(N³)→O(N·k) time - Scalability comparison table: 10K→10M DOF - Demonstrated results: 10×10 system, 9 iterations, 7.73×10⁻¹⁴ error Contact mechanics killer app (lines 291-340): - Why nodal assembly natural for contact (contact is nodal not element-based) - Contact workflow: detect→assemble→solve→update - Element-based assembly is mismatch for contact Implementation strategy v1.0 (lines 342-407): - Phase 1: Foundation (complete) - type-stable design, GPU/MPI demos, Krylov validation - Phase 2: Core implementation - nodal assembly API, matrix-free operator, GPU accel, MPI distribution - Phase 3: Contact integration - detection, contribution to rows, iterative solve Comparison with other strategies (lines 409-455): - Global matrix assembly: dead end for scalability - Element-based matrix-free: works but suboptimal for contact - Nodal + matrix-free + multi-GPU (ours): best for large-scale contact Validation and evidence (lines 457-533): - Three demonstrations: gpu_mpi_demo, krylov_mpi_gpu_demo, field_storage_comparison - Real-world applicability: LAMMPS, GROMACS use similar patterns - Why traditional FEM codes don't do this: legacy constraints Conclusion (lines 535-588): - Five validated achievements proving path forward - Not speculation: working code on real hardware - Path is clear: type stability foundation, nodal assembly pattern, Krylov+MPI solver - Related documentation links Purpose: Strategic justification for v1.0 architecture with real evidence
title, description, date, author, categories, keywords, type
| title | description | date | author | categories | keywords | type | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| JuliaFEM Documentation | Three-tier documentation structure for users, contributors, and researchers | 2025-11-09 | Jukka Aho |
|
|
index |
JuliaFEM Documentation
Welcome! JuliaFEM documentation is organized into three manuals for three different audiences:
📘 User Manual - "Just Get It Done"
For: End users, engineers, students who want to run simulations.
Style: Simple, practical, step-by-step.
Contents:
- Quick start and installation
- Tutorials and examples
- API reference
- Troubleshooting
Philosophy: Show me how to solve my problem, skip the lectures.
👉 Start Here if you want to run simulations.
🔧 Contributor Manual - "Show Me the Code"
For: Developers, contributors, advanced users who want to extend JuliaFEM.
Style: Technical, detailed, design rationale.
Contents:
- Testing philosophy
- Code style and architecture
- Performance guidelines
- How to add elements
- CI/CD and git workflow
Philosophy: Explain HOW the code works and WHY we made these choices.
👉 Start Here if you want to contribute code.
📖 The JuliaFEM Book - "Let Me Show You How I Think"
For: Advanced researchers, theory nerds, those who want to understand deeply. And Jukka.
Style: Comprehensive, educational, opinionated, personal.
Contents:
- Mathematical foundations (Lagrange basis, contact mechanics, etc.)
- Design philosophy and technical vision
- Strategic mistakes and lessons learned (2015-2019)
- Research directions (nodal assembly, matrix-free, etc.)
- Personal reflections on the journey
Philosophy: Mix theory, software design, and personal experience. Teach FEM through implementation.
👉 Start Here if you love deep dives and want to understand the "why" behind everything.
Quick Navigation
I want to...
- Solve a heat transfer problem → User Manual
- Add a new element type → Contributor Manual
- Understand Lagrange basis functions → Book: Lagrange Basis
- Learn about testing → Contributor: Testing Philosophy
- See benchmark results → Book: Benchmarks
- Understand the design philosophy → Book: Philosophy
- Report a bug → GitHub Issues
- Ask a question → GitHub Discussions
Documentation Philosophy
Why Three Manuals?
Different readers have different needs:
- Users don't care about implementation details - they just want working code.
- Contributors need technical depth but not necessarily all the theory.
- Researchers (and Jukka) want to understand everything from first principles.
Mixing these audiences in one manual makes it too complex for users and too shallow for researchers.
Design Principles
- User Manual: Optimize for time-to-first-result
- Contributor Manual: Optimize for correctness and maintainability
- Book: Optimize for understanding and education
Cross-References
Manuals link to each other when appropriate:
- User manual links to theory when deeper understanding helps
- Contributor manual links to book for design rationale
- Book links to code examples and practical guides
Contributing to Documentation
Documentation improvements are always welcome!
- User docs: Fix errors, add examples, improve clarity
- Contributor docs: Update for new features, clarify architecture
- Book: Add theory, share insights, document research
See Contributor Manual for guidelines.
License: MIT (same as code)
Questions? Open an issue or discussion on GitHub