forked from 1b-agent/fieldcraft-upstream
solver: symmetric indefinite LDLᵀ factorization with inertia
A supernodal LDLᵀ on the Cholesky factor's symbolic factorization (ordering, supernodes, fill, cap and parallel subtree tasks shared through a Symbolic and a generic driver; the Cholesky numerics are unchanged bit for bit). Pivots by the bounded Bunch–Kaufman (rook) search of Ashcraft, Grimes & Lewis among each supernode's columns (Schenk & Gärtner's supernode Bunch–Kaufman), 1 × 1 and 2 × 2, right-looking panels whose trailing update reuses the tiled Cholesky kernels with L D formed on the fly. Reports the inertia; a column without a pivot above round-off is a located Singular error; NaN is refused. Symmetric::new picks Cholesky, LDLᵀ, or Cholesky with an LDLᵀ fallback; solve_refined adds iterative refinement. 1.1–1.2× the Cholesky time on a 140 000-equation hex8 pattern. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm
This commit is contained in:
1 parent
11a69d8171
commit
908dae180b
7 files changed
+1176
-75
No files matched your search
+23
@@ -150,6 +150,29 @@ when confined. A continuous
|
||||
nodal pressure (`DofKind::P`, Taylor–Hood) needs a symmetric indefinite factorization and is
|
||||
planned.
|
||||
|
||||
## Symmetric indefinite factorization (LDLᵀ)
|
||||
|
||||
`fieldcraft_solver::ldlt` factors P A Pᵀ = L D Lᵀ (L unit lower triangular, D with 1 × 1 and
|
||||
2 × 2 pivots) on the Cholesky factor's symbolic factorization: the same nested dissection
|
||||
ordering, elimination tree, supernodes, fill, factor-size cap and parallel subtree tasks, so it
|
||||
is deterministic on any number of threads. Pivots are chosen by the bounded Bunch–Kaufman (rook)
|
||||
search of Ashcraft, Grimes & Lewis (1998) among the columns of the supernode being factored
|
||||
(Schenk & Gärtner's supernode Bunch–Kaufman, 2006): an interchange inside a supernode changes no
|
||||
row structure, so nothing is delayed and the static structure holds. Its limits, stated in the
|
||||
module: L's entries below the supernode are not bounded by the search (`solve_refined` adds
|
||||
iterative refinement), and a column whose supernode offers no pivot above round-off is a located
|
||||
`Singular` error (a matrix singular at that column, or a zero diagonal coupled only to later
|
||||
supernodes, which no FieldCraft system has: hybrid pressures are condensed per element).
|
||||
|
||||
The factor reports its **inertia** (positive and negative eigenvalue counts, Sylvester's law):
|
||||
a 2 × 2 pivot of the search has a negative determinant (one of each). `Symmetric::new(a, cap,
|
||||
kind)` picks Cholesky (`Definite`, the default everywhere a matrix is positive definite, so
|
||||
linear results are bit for bit unchanged), LDLᵀ (`Indefinite`), or Cholesky with LDLᵀ when the
|
||||
matrix turns out not to be positive definite (`Auto`, one symbolic factorization for both).
|
||||
On a hex8 stiffness pattern of 140 000 equations (1.5 · 10⁸ entries) the LDLᵀ factor costs 1.1
|
||||
times the Cholesky factor, and 1.2 times on a shift with 10 600 negative eigenvalues and 7 700
|
||||
2 × 2 pivots (`ldlt::tests::speed_against_cholesky`).
|
||||
|
||||
## Nonlinear static analysis (finite strain)
|
||||
|
||||
A step `{"type": "nonlinear_static", …}` (`Procedure::NonlinearStatic`, solved by
|
||||
|
||||
@@ -1228,3 +1228,21 @@ update are written from (cited again in the module docs):
|
||||
- Thermal strain by the multiplicative split F = F_m F_θ: V. A. Lubarda, *Constitutive
|
||||
theories based on the multiplicative decomposition of deformation gradient: thermoelasticity,
|
||||
elastoplasticity, and biomechanics*, Appl. Mech. Rev. 57(2):95–108, 2004.
|
||||
|
||||
## Part P: Symmetric indefinite factorization, linear buckling and arc-length, as implemented
|
||||
|
||||
- Symmetric indefinite pivoting: J. R. Bunch, L. Kaufman, *Some stable methods for calculating
|
||||
inertia and solving symmetric linear systems*, Math. Comp. 31(137):163–179, 1977; the bounded
|
||||
(rook) search, C. Ashcraft, R. G. Grimes, J. G. Lewis, *Accurate symmetric indefinite linear
|
||||
equation solvers*, SIAM J. Matrix Anal. Appl. 20(2):513–561, 1998; the panel's partial
|
||||
factorization of LAPACK's `dsytrf`, E. Anderson et al., *LAPACK Users' Guide*, 3rd ed., SIAM
|
||||
1999.
|
||||
- Pivoting within supernodes on a static structure: O. Schenk, K. Gärtner, *On fast
|
||||
factorization pivoting methods for sparse symmetric indefinite systems*, Electron. Trans.
|
||||
Numer. Anal. 23:158–179, 2006. Delayed pivots (the multifrontal alternative, not used: it
|
||||
changes the structure as it goes): I. S. Duff, J. K. Reid, *The multifrontal solution of
|
||||
indefinite sparse symmetric linear equations*, ACM TOMS 9(3):302–325, 1983; J. W. H. Liu, *The
|
||||
multifrontal method for sparse matrix solution: theory and practice*, SIAM Review
|
||||
34(1):82–109, 1992.
|
||||
- Iterative refinement: N. J. Higham, *Accuracy and Stability of Numerical Algorithms*, 2nd ed.,
|
||||
SIAM 2002, §12.2.
|
||||
Reference in new issue
Block a user