mirror of
https://github.com/JuliaFEM/JuliaFEM.jl.git
synced 2026-09-29 04:56:15 +00:00
487f977dea
src/README.md | 597 ++++++---------------------------------------------------- 1 file changed, 61 insertions(+), 536 deletions(-)
62 lines
4.2 KiB
Markdown
62 lines
4.2 KiB
Markdown
# src/
|
|
|
|
Top-level layout of the JuliaFEM source tree. The package is **0.x**; the
|
|
repository is in the middle of a deliberate architectural reset toward a
|
|
**stable 1.0**. The directories below list what is currently active and where
|
|
the boundary with the legacy code lies.
|
|
|
|
For the canonical, up-to-date architecture summary read `AGENTS.md` in
|
|
the repository root. For per-module details, follow the README files
|
|
inside each subdirectory.
|
|
|
|
## Active modules
|
|
|
|
| Directory | Responsibility |
|
|
|-----------------|------------------------------------------------------------------------------------------------------------------------------|
|
|
| `topology/` | Reference shapes and topological entities (`Triangle`, `Tetrahedron`, `Hexahedron`, `Vertex`, `Edge`, `Face`, `Cell`, …). |
|
|
| `basis/` | Shape-function families (`Lagrange{P}`, `Serendipity{P}`, plate bases) plus the symbolic generator that produces them. |
|
|
| `quadrature/` | Gauss-Legendre integration points for every supported topology. |
|
|
| `geometry/` | Jacobians, physical derivatives, strain tensors. |
|
|
| `mesh/` | Type-stable `Mesh{N, Topo}`, structured/circular generators, refinement, RCM ordering, gmsh wrapper. |
|
|
| `dofs/` | `DOF{Quantity, Entity}`, `@DOFSet`, `DOFHandler`, DOF connectivity and the field/dof-extraction infrastructure. |
|
|
| `elements/` | `Element{K, P, S, N}` template, compile-time `local_dof_layout`, DOF-extraction and field-interpolation utilities. |
|
|
| `materials/` | `LinearElastic`, `NeoHookean`, `PerfectPlasticity`, `HeatConductivity` and the trait-based dispatch used by the kernels. |
|
|
| `assemblers/` | Assembly caches, `ElementBasedAssembler` (COO/CSC) and `DOFBasedCOOAssembler`, the matrix-free `apply_K!`/`apply_M!` path. |
|
|
| `domains/` | Physics kernels per discipline: `continuum/`, `heat/`, `thermo_elastic/`. See `domains/README.md`; each subdirectory implements an `AbstractKernel`. |
|
|
| `physics/` | `AbstractPhysics` tag (`Elasticity{Dim}`, `Thermal{Dim}`), microkernel contract for the DOF-based path, formulation helpers and strain extraction. |
|
|
| `io/` | Mesh readers (Gmsh by default; Abaqus + Aster live in the optional `Legacy` submodule). |
|
|
| `sparse/` | Lightweight sparse-matrix utilities (DOK / COO). |
|
|
| `fields/` | `AbstractField` (`Displacement`, `Temperature`, `DisplacementRotation`) and the `LocalField` interpolation type. |
|
|
|
|
## Top-level files
|
|
|
|
- `JuliaFEM.jl` is the package entry point. It pulls in everything above
|
|
in dependency order and is the source of truth for the export list.
|
|
|
|
## Legacy
|
|
|
|
`legacy/` contains the older pre-reset framework code (`Problem` / `Solver` /
|
|
`Analysis`, the Dict-based field types `DCTI` / `DVTI` / `DCTV` / `DVTV`,
|
|
the `Element(Poi1, ...)` constructor family, the Abaqus mesh-reader
|
|
stack, the FEMBase-style `update!` shims, …). It is wrapped in
|
|
`module Legacy` and is loaded only when the environment variable
|
|
`JULIAFEM_ENABLE_LEGACY=1` is set at module-load time. Names live under
|
|
`JuliaFEM.Legacy.<name>` and are not re-exported at the top level.
|
|
|
|
The legacy gate is evaluated when the precompile cache is built, so
|
|
switching modes requires `Pkg.precompile()` after toggling the variable
|
|
(or deleting the cache under `~/.julia/compiled/v$VERSION/JuliaFEM/`).
|
|
|
|
New development should not extend `legacy/`.
|
|
|
|
## Conventions
|
|
|
|
- File names are `lowercase_with_underscores.jl`.
|
|
- Modules avoid in-source markdown documents; sub-READMEs are the only
|
|
exception. Architectural notes and design proposals belong in `llm/`.
|
|
- Hot-path code must remain zero-allocation and type-stable; the
|
|
regression for this lives in
|
|
`test/assemblers/test_dof_based_zero_alloc.jl`.
|
|
- Greek letters are not used in code identifiers (`u`, `v`, `w`
|
|
for reference coordinates). They are fine in comments and docstrings.
|