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.AbstractLinearSolver
— Typeabstract type AbstractLinearSolver
A linear solver simply needs to define the following methods
- residual_norm
- 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
Direct Solver
Cthonios.DirectSolver
— Typeassembler::Any
linsolve::Any
timer::Any
Direct linear solver
Cthonios.DirectSolver
— MethodDirectSolver(
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
Cthonios.gradient!
— Methodgradient!(
solver::DirectSolver,
obj::Objective,
Uu,
p::ObjectiveParameters
)
Cthonios.hessian!
— Methodhessian!(solver::DirectSolver, obj, Uu, p)
Cthonios.residual_norm
— Methodresidual_norm(solver::DirectSolver, obj, Uu, p) -> Any
Cthonios.solve!
— Methodsolve!(ΔUu, solver::DirectSolver, obj, Uu, p)
Preconditioners
Cthonios.AbstractPreconditioner
— Typeabstract type AbstractPreconditioner
Abstract base preconditioner type.
Cthonios.CholeskyPreconditioner
— Typemutable struct CholeskyPreconditioner{A, P, T} <: Cthonios.AbstractPreconditioner
assembler::Any
preconditioner::Any
timer::Any
Cthonios.CholeskyPreconditioner
— MethodCholeskyPreconditioner(
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})
Cthonios.LDLPreconditioner
— Typestruct LDLPreconditioner{A, P, T} <: Cthonios.AbstractPreconditioner
assembler::Any
preconditioner::Any
timer::Any
Cthonios.LDLPreconditioner
— MethodLDLPreconditioner(
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})
Cthonios.LimitedLDLPreconditioner
— Typemutable struct LimitedLDLPreconditioner{A, P, T} <: Cthonios.AbstractPreconditioner
assembler::Any
preconditioner::Any
timer::Any
Cthonios.LimitedLDLPreconditioner
— MethodLimitedLDLPreconditioner(
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})
LinearAlgebra.ldiv!
— Methodldiv!(y, P::CholeskyPreconditioner, v)