Linear Solvers

This section describes the interface for linear solvers.

Input File Syntax Example

Below is an example input file block for a direct solver with an LDLT factorization.

linear solvers:
  direct:
    type: DirectLinearSolver
    factorization method: ldl

General methods and abstract types

Cthonios.AbstractLinearSolverType
abstract type AbstractLinearSolver

A linear solver simply needs to define the following methods

  1. residual_norm
  2. solve!

solve! method which has the following signature solve!(ΔUu, solver::DirectSolver, obj, Uu, p) where ΔUu is the increment for a nonlinear solver solver is the solver, obj is the objective, Uu is the current guess of the solution, and p is the set of parameters

source

Direct Solver

Cthonios.DirectSolverMethod
DirectSolver(
    obj::Objective,
    p,
    timer
) -> DirectSolver{A, L} where {A<:(FiniteElementContainers.StaticAssembler{Float64, Int64, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, Vector{Int64}, Vector{Int64}, Vector{Float64}} where {_A<:AbstractVector{Int64}, _B<:AbstractVector{Int64}, _C<:AbstractVector{Int64}, _D<:AbstractVector{Int64}, _E<:AbstractVector{Int64}, _F<:FiniteElementContainers.NodalField, _G<:AbstractVector{Float64}, _H, _I, _J, _K}), L<:(LinearSolve.LinearCache{LinearAlgebra.Symmetric{Float64, SparseArrays.SparseMatrixCSC{Float64, Int64}}, _A, _B, SciMLBase.NullParameters, LinearSolve.DefaultLinearSolver, LinearSolve.DefaultLinearSolverInit{LinearAlgebra.LU{Float64, SparseArrays.SparseMatrixCSC{Float64, Int64}, Vector{Int64}}, LinearAlgebra.QR{Float64, SparseArrays.SparseMatrixCSC{Float64, Int64}, Vector{Float64}}, Nothing, Nothing, Sparspak.SpkSparseSolver.SparseSolver{Int64, Float64}, Nothing, Nothing, _A1, LinearAlgebra.LU{Float64, SparseArrays.SparseMatrixCSC{Float64, Int64}, Vector{Int64}}, Tuple{LinearAlgebra.LU{Float64, SparseArrays.SparseMatrixCSC{Float64, Int64}, Vector{Int64}}, Vector{Int64}}, Nothing, Nothing, SparseArrays.CHOLMOD.Factor{Float64, Int64}, Nothing, SparseArrays.CHOLMOD.Factor{Float64, Int64}, SparseArrays.CHOLMOD.Factor{Float64, Int64}, Tuple{LinearAlgebra.LU{Float64, Matrix{Float64}, Vector{Int32}}, Base.RefValue{Int32}}, Tuple{LinearAlgebra.LU{Float64, Matrix{Float64}, Vector{Int64}}, Base.RefValue{Int64}}, LinearAlgebra.QR{Float64, SparseArrays.SparseMatrixCSC{Float64, Int64}, Vector{Float64}}, _B1, _C}, SciMLOperators.IdentityOperator, SciMLOperators.IdentityOperator, _C1, Bool} where {_A, _B, _A1, _B1, _C, _C1})}

Direct linear solver constructor from a Domain

source

Preconditioners

Cthonios.CholeskyPreconditionerMethod
CholeskyPreconditioner(
    obj::Objective,
    p,
    timer
) -> CholeskyPreconditioner{A, SparseArrays.CHOLMOD.Factor{Float64, Int64}} where A<:(FiniteElementContainers.StaticAssembler{Float64, Int64, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, Vector{Int64}, Vector{Int64}, Vector{Float64}} where {_A<:AbstractVector{Int64}, _B<:AbstractVector{Int64}, _C<:AbstractVector{Int64}, _D<:AbstractVector{Int64}, _E<:AbstractVector{Int64}, _F<:FiniteElementContainers.NodalField, _G<:AbstractVector{Float64}, _H, _I, _J, _K})
source
Cthonios.LDLPreconditionerMethod
LDLPreconditioner(
    obj::Objective,
    p,
    timer
) -> LDLPreconditioner{A, LDLFactorizations.LDLFactorization{Float64, Int64, Int64, Int64}} where A<:(FiniteElementContainers.StaticAssembler{Float64, Int64, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, Vector{Int64}, Vector{Int64}, Vector{Float64}} where {_A<:AbstractVector{Int64}, _B<:AbstractVector{Int64}, _C<:AbstractVector{Int64}, _D<:AbstractVector{Int64}, _E<:AbstractVector{Int64}, _F<:FiniteElementContainers.NodalField, _G<:AbstractVector{Float64}, _H, _I, _J, _K})
source
Cthonios.LimitedLDLPreconditionerMethod
LimitedLDLPreconditioner(
    obj::Objective,
    p,
    timer
) -> LimitedLDLPreconditioner{A, LimitedLDLFactorizations.LimitedLDLFactorization{Float64, Int64, Vector{Int64}, Vector{Int64}}} where A<:(FiniteElementContainers.StaticAssembler{Float64, Int64, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, Vector{Int64}, Vector{Int64}, Vector{Float64}} where {_A<:AbstractVector{Int64}, _B<:AbstractVector{Int64}, _C<:AbstractVector{Int64}, _D<:AbstractVector{Int64}, _E<:AbstractVector{Int64}, _F<:FiniteElementContainers.NodalField, _G<:AbstractVector{Float64}, _H, _I, _J, _K})
source