Browse Source

Store MPI communicator in structs, default to COMM_NULL

This patch stores the MPI communicator in the solvers structs. The
default communicator is changed from COMM_WORLD to COMM_NULL, for
BiCGSTAB, GMRES, and PCG, since their respective HYPRE_Create functions
simply ignore this argument.
pull/5/head
Fredrik Ekre 3 years ago
parent
commit
e7e1200c84
  1. 18
      src/solvers.jl

18
src/solvers.jl

@ -79,9 +79,11 @@ end
#################### ####################
mutable struct BiCGSTAB <: HYPRESolver mutable struct BiCGSTAB <: HYPRESolver
comm::MPI.Comm
solver::HYPRE_Solver solver::HYPRE_Solver
function BiCGSTAB(comm::MPI.Comm=MPI.COMM_WORLD; kwargs...) function BiCGSTAB(comm::MPI.Comm=MPI.COMM_NULL; kwargs...)
solver = new(C_NULL) # comm defaults to COMM_NULL since it is unused in HYPRE_ParCSRBiCGSTABCreate
solver = new(comm, C_NULL)
solver_ref = Ref{HYPRE_Solver}(C_NULL) solver_ref = Ref{HYPRE_Solver}(C_NULL)
@check HYPRE_ParCSRBiCGSTABCreate(comm, solver_ref) @check HYPRE_ParCSRBiCGSTABCreate(comm, solver_ref)
solver.solver = solver_ref[] solver.solver = solver_ref[]
@ -146,9 +148,11 @@ Internals.setup_func(::BoomerAMG) = HYPRE_BoomerAMGSetup
######### #########
mutable struct GMRES <: HYPRESolver mutable struct GMRES <: HYPRESolver
comm::MPI.Comm
solver::HYPRE_Solver solver::HYPRE_Solver
function GMRES(comm::MPI.Comm=MPI.COMM_WORLD; kwargs...) function GMRES(comm::MPI.Comm=MPI.COMM_NULL; kwargs...)
solver = new(C_NULL) # comm defaults to COMM_NULL since it is unused in HYPRE_ParCSRGMRESCreate
solver = new(comm, C_NULL)
solver_ref = Ref{HYPRE_Solver}(C_NULL) solver_ref = Ref{HYPRE_Solver}(C_NULL)
@check HYPRE_ParCSRGMRESCreate(comm, solver_ref) @check HYPRE_ParCSRGMRESCreate(comm, solver_ref)
solver.solver = solver_ref[] solver.solver = solver_ref[]
@ -182,9 +186,11 @@ end
############### ###############
mutable struct PCG <: HYPRESolver mutable struct PCG <: HYPRESolver
comm::MPI.Comm
solver::HYPRE_Solver solver::HYPRE_Solver
function PCG(comm::MPI.Comm=MPI.COMM_WORLD; kwargs...) function PCG(comm::MPI.Comm=MPI.COMM_NULL; kwargs...)
solver = new(C_NULL) # comm defaults to COMM_NULL since it is unused in HYPRE_ParCSRPCGCreate
solver = new(comm, C_NULL)
solver_ref = Ref{HYPRE_Solver}(C_NULL) solver_ref = Ref{HYPRE_Solver}(C_NULL)
@check HYPRE_ParCSRPCGCreate(comm, solver_ref) @check HYPRE_ParCSRPCGCreate(comm, solver_ref)
solver.solver = solver_ref[] solver.solver = solver_ref[]

Loading…
Cancel
Save