Without Gmsh or WriteVTK loaded, read_gmsh_msh and write_vtu_mesh raise clear ErrorException messages pointing users at the weak extension packages. - Add gmsh_stub.jl docstrings, read_gmsh_msh stub, mesh_from_current_gmsh_model - Add write_vtu.jl docstring and write_vtu_mesh stub for WriteVTK extension
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.jlis 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,wfor reference coordinates). They are fine in comments and docstrings.