
About
When actually solving physical simulations with the finite element method, it’s important to carefully consider the properties of the matrices. Since I’ve asked ChatGPT several times about this in the context of structural analysis, I’ll summarize the key points here so I don’t forget them.
Condense/Enforce
First, for linear problems, there are two main approaches: condense and enforce. I’ve already written about this in an article in the past.
Put simply, it’s about how to handle the degrees of freedom that vanish due to Dirichlet boundary conditions.
condense
Completely eliminates Dirichlet degrees of freedom, so the reduced system matches the original physics. Easier to preserve SPD (symmetric positive definite), making efficient solvers like Cholesky or CG safe to use. Tends to yield a smaller condition number → recommended if stability is the priority.
enforce
Modifies the matrix directly. Symmetry may be broken, which can be dangerous especially for CG or Cholesky. Does not improve the condition number, and may become inefficient for large-scale problems.
Practical Criteria in Applications
If prioritizing numerical stability and efficiency → condense Fixed boundaries are zero displacement (or share a common prescribed value). You want to solve multiple load cases together. You plan to use an SPD solver. If prioritizing flexibility and ease of implementation → enforce Dirichlet displacements vary from one load case to another. Your solver can handle nonsymmetric systems (e.g., LU, GMRES). You need to pass the full matrix to an external program.
Solvers
- Linear elasticity analysis → SPD matrix → IC/AMG + CG
- Buckling / geometric nonlinearity → symmetric but indefinite → MINRES or GMRES
- Damping or contact (nonsymmetric systems) → ILU/AMG + GMRES or BiCGStab