|
|
|
|
@ -106,8 +106,8 @@ function solve!(bicg::BiCGSTAB, x::HYPREVector, A::HYPREMatrix, b::HYPREVector)
@@ -106,8 +106,8 @@ function solve!(bicg::BiCGSTAB, x::HYPREVector, A::HYPREMatrix, b::HYPREVector)
|
|
|
|
|
return x |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
Internals.solve_func(::BiCGSTAB) = HYPRE_ParCSRBiCGSTABSolve |
|
|
|
|
Internals.setup_func(::BiCGSTAB) = HYPRE_ParCSRBiCGSTABSetup |
|
|
|
|
Internals.solve_func(::BiCGSTAB) = HYPRE_ParCSRBiCGSTABSolve |
|
|
|
|
|
|
|
|
|
function Internals.set_precond(bicg::BiCGSTAB, p::HYPRESolver) |
|
|
|
|
solve_f = Internals.solve_func(p) |
|
|
|
|
@ -142,8 +142,8 @@ function solve!(amg::BoomerAMG, x::HYPREVector, A::HYPREMatrix, b::HYPREVector)
@@ -142,8 +142,8 @@ function solve!(amg::BoomerAMG, x::HYPREVector, A::HYPREMatrix, b::HYPREVector)
|
|
|
|
|
return x |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
Internals.solve_func(::BoomerAMG) = HYPRE_BoomerAMGSolve |
|
|
|
|
Internals.setup_func(::BoomerAMG) = HYPRE_BoomerAMGSetup |
|
|
|
|
Internals.solve_func(::BoomerAMG) = HYPRE_BoomerAMGSolve |
|
|
|
|
|
|
|
|
|
function Internals.set_precond_defaults(amg::BoomerAMG) |
|
|
|
|
defaults = (; Tol = 0.0, MaxIter = 1) |
|
|
|
|
@ -152,6 +152,43 @@ function Internals.set_precond_defaults(amg::BoomerAMG)
@@ -152,6 +152,43 @@ function Internals.set_precond_defaults(amg::BoomerAMG)
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
######### |
|
|
|
|
## FSAI # |
|
|
|
|
######### |
|
|
|
|
|
|
|
|
|
# Requires version 2.25 |
|
|
|
|
|
|
|
|
|
#mutable struct FSAI <: HYPRESolver |
|
|
|
|
# solver::HYPRE_Solver |
|
|
|
|
# function FSAI(; kwargs...) |
|
|
|
|
# solver = new(C_NULL) |
|
|
|
|
# solver_ref = Ref{HYPRE_Solver}(C_NULL) |
|
|
|
|
# @check HYPRE_FSAICreate(solver_ref) |
|
|
|
|
# solver.solver = solver_ref[] |
|
|
|
|
# # Attach a finalizer |
|
|
|
|
# finalizer(x -> HYPRE_FSAIDestroy(x.solver), solver) |
|
|
|
|
# # Set the options |
|
|
|
|
# Internals.set_options(solver, kwargs) |
|
|
|
|
# return solver |
|
|
|
|
# end |
|
|
|
|
#end |
|
|
|
|
|
|
|
|
|
#function solve!(fsai::FSAI, x::HYPREVector, A::HYPREMatrix, b::HYPREVector) |
|
|
|
|
# @check HYPRE_FSAISetup(fsai.solver, A.parmatrix, b.parvector, x.parvector) |
|
|
|
|
# @check HYPRE_FSAISolve(fsai.solver, A.parmatrix, b.parvector, x.parvector) |
|
|
|
|
# return x |
|
|
|
|
#end |
|
|
|
|
|
|
|
|
|
#Internals.setup_func(::FSAI) = HYPRE_FSAISetup |
|
|
|
|
#Internals.solve_func(::FSAI) = HYPRE_FSAISolve |
|
|
|
|
|
|
|
|
|
#function Internals.set_precond_defaults(fsai::FSAI) |
|
|
|
|
# defaults = (; Tolerance = 0.0) |
|
|
|
|
# Internals.set_options(fsai, pairs(defaults)) |
|
|
|
|
# return nothing |
|
|
|
|
#end |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
######### |
|
|
|
|
# GMRES # |
|
|
|
|
######### |
|
|
|
|
@ -179,8 +216,8 @@ function solve!(gmres::GMRES, x::HYPREVector, A::HYPREMatrix, b::HYPREVector)
@@ -179,8 +216,8 @@ function solve!(gmres::GMRES, x::HYPREVector, A::HYPREMatrix, b::HYPREVector)
|
|
|
|
|
return x |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
Internals.solve_func(::GMRES) = HYPRE_ParCSRGMRESSetup |
|
|
|
|
Internals.setup_func(::GMRES) = HYPRE_ParCSRGMRESSolve |
|
|
|
|
Internals.setup_func(::GMRES) = HYPRE_ParCSRGMRESSetup |
|
|
|
|
Internals.solve_func(::GMRES) = HYPRE_ParCSRGMRESSolve |
|
|
|
|
|
|
|
|
|
function Internals.set_precond(gmres::GMRES, p::HYPRESolver) |
|
|
|
|
solve_f = Internals.solve_func(p) |
|
|
|
|
@ -219,8 +256,8 @@ function solve!(pcg::PCG, x::HYPREVector, A::HYPREMatrix, b::HYPREVector)
@@ -219,8 +256,8 @@ function solve!(pcg::PCG, x::HYPREVector, A::HYPREMatrix, b::HYPREVector)
|
|
|
|
|
return x |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
Internals.solve_func(::PCG) = HYPRE_ParCSRPCGSolve |
|
|
|
|
Internals.setup_func(::PCG) = HYPRE_ParCSRPCGSetup |
|
|
|
|
Internals.solve_func(::PCG) = HYPRE_ParCSRPCGSolve |
|
|
|
|
|
|
|
|
|
function Internals.set_precond(pcg::PCG, p::HYPRESolver) |
|
|
|
|
solve_f = Internals.solve_func(p) |
|
|
|
|
|