MORFE.jl implements the Direct Parametrisation of Invariant Manifolds (DPIM) algorithm — a spectral submanifold reduction technique for high-dimensional nonlinear dynamical systems arising from finite element models.
- DPIM implementation — Direct Parametrisation of Invariant Manifolds for nonlinear model order reduction
- N-th order ODEs — native support for second-order (and higher-order) mechanical systems, no manual conversion to first-order form required
- External forcing — polynomial external forcing systems handled at the level of the invariance equation
- Resonance handling — graph-style, complex/real normal form, and condition-number–based resonance detection
- Polynomial framework — built-in multiindex sets, dense polynomials, and realification utilities
- FEM-agnostic — works with Gridap.jl, Ferrite.jl, or any custom FEM backend
- Julia-native — multiple dispatch and static type parameters for performance
MORFE.jl is not yet registered in the Julia General Registry. Install directly from GitHub:
using Pkg
Pkg.add(url="https://github.com/MORFEproject/MORFE.jl.git")Or in Pkg REPL mode (]):
add https://github.com/MORFEproject/MORFE.jl.gitusing MORFE
# Define a second-order full-order model: M ẍ + C ẋ + K x = f(x, ẋ)
model = NDOrderModel((K, C, M), nonlinear_terms)
# Extract first-order matrices and compute eigenpairs
A, B = linear_first_order_matrices(model)
result = generalised_eigenpairs(A, B; nev = 4, sigma = 0.0)
# Build the resonance set and solve the parametrisation
# See demo/ for complete worked examplesFor detailed examples, see the demo/ directory.
MORFE.jl/
├── src/
│ ├── MORFE.jl # Main package module
│ ├── Multiindices.jl # Multiindex set utilities
│ ├── Polynomials.jl # Dense polynomial representation
│ ├── Realification.jl # Complex-to-real transformation
│ ├── FullOrderModel/ # FOM types and nonlinear maps
│ ├── SpectralDecomposition/ # Eigensolvers and mode propagation
│ └── ParametrisationMethod/ # DPIM core: resonance, invariance equation, ROM
├── demo/ # Worked examples
├── test/ # Test suite
└── docs/ # Documentation source
| Module | Description |
|---|---|
Multiindices |
Multiindex sets with graded lex ordering and factorisation utilities |
Polynomials |
Dense multivariate polynomials aligned to multiindex sets |
Realification |
Change of variables from complex (z, z̄) to real (x, y) coordinates |
FullOrderModel |
NDOrderModel and FirstOrderModel with multilinear nonlinear terms |
Eigensolvers |
ARPACK-based generalised eigensolver with shift-and-invert |
EigenModesPropagation |
Left/right eigenvector and Jordan vector propagation for N-th order systems |
Resonance |
Resonance set construction (graph, normal form, condition-number strategies) |
InvarianceEquation |
Cohomological system assembly via fused Horner passes |
MasterModeOrthogonality |
Orthogonality condition assembly for resonant master modes |
ParametrisationMethod |
Core Parametrisation and ReducedDynamics types |
MultilinearTerms |
Nonlinear right-hand side contributions with caching |
LowerOrderCouplings |
Lower-order coupling vectors for the cohomological equation |
Full documentation is available at morfeproject.github.io/MORFE.jl.
Pre-Alpha: The API may change significantly between versions.
Contributions are welcome. Please open an issue or submit a pull request on GitHub.
- Haller, G. & Ponsioen, S. (2016). Nonlinear normal modes and spectral submanifolds. Nonlinear Dynamics.
- Opreni, A. et al. (2023). High-order direct parametrisation of invariant manifolds for model order reduction of finite element structures. Nonlinear Dynamics.
MIT License — see LICENSE for details.