From e7e1200c848c13ff22b37e53fa6a2222116cc3f3 Mon Sep 17 00:00:00 2001 From: Fredrik Ekre Date: Wed, 27 Jul 2022 16:03:19 +0200 Subject: [PATCH] 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. --- src/solvers.jl | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/solvers.jl b/src/solvers.jl index f8d09ed..be03d97 100644 --- a/src/solvers.jl +++ b/src/solvers.jl @@ -79,9 +79,11 @@ end #################### mutable struct BiCGSTAB <: HYPRESolver + comm::MPI.Comm solver::HYPRE_Solver - function BiCGSTAB(comm::MPI.Comm=MPI.COMM_WORLD; kwargs...) - solver = new(C_NULL) + function BiCGSTAB(comm::MPI.Comm=MPI.COMM_NULL; kwargs...) + # comm defaults to COMM_NULL since it is unused in HYPRE_ParCSRBiCGSTABCreate + solver = new(comm, C_NULL) solver_ref = Ref{HYPRE_Solver}(C_NULL) @check HYPRE_ParCSRBiCGSTABCreate(comm, solver_ref) solver.solver = solver_ref[] @@ -146,9 +148,11 @@ Internals.setup_func(::BoomerAMG) = HYPRE_BoomerAMGSetup ######### mutable struct GMRES <: HYPRESolver + comm::MPI.Comm solver::HYPRE_Solver - function GMRES(comm::MPI.Comm=MPI.COMM_WORLD; kwargs...) - solver = new(C_NULL) + function GMRES(comm::MPI.Comm=MPI.COMM_NULL; kwargs...) + # comm defaults to COMM_NULL since it is unused in HYPRE_ParCSRGMRESCreate + solver = new(comm, C_NULL) solver_ref = Ref{HYPRE_Solver}(C_NULL) @check HYPRE_ParCSRGMRESCreate(comm, solver_ref) solver.solver = solver_ref[] @@ -182,9 +186,11 @@ end ############### mutable struct PCG <: HYPRESolver + comm::MPI.Comm solver::HYPRE_Solver - function PCG(comm::MPI.Comm=MPI.COMM_WORLD; kwargs...) - solver = new(C_NULL) + function PCG(comm::MPI.Comm=MPI.COMM_NULL; kwargs...) + # comm defaults to COMM_NULL since it is unused in HYPRE_ParCSRPCGCreate + solver = new(comm, C_NULL) solver_ref = Ref{HYPRE_Solver}(C_NULL) @check HYPRE_ParCSRPCGCreate(comm, solver_ref) solver.solver = solver_ref[]