FrontISTR  5.9.0
Large-scale structural analysis program with finit element method
hecmw_precond_saamg_coarse_mumps Module Reference

Smoothed Aggregation AMG preconditioner : distributed MUMPS coarsest solver. More...

Functions/Subroutines

logical function, public hecmw_saamg_cmumps_available ()
 .true. only when compiled with MUMPS; the caller uses the dense coarsest else. More...
 
subroutine, public hecmw_saamg_cmumps_setup (cmt, Aloc, my_off, m, naggr_local, symmetric, cm)
 Factor the distributed coarse operator. Aloc = this rank's owned coarse rows (n_loc = naggr_local*m rows, columns localized; global column dof via cmtgnode); my_off = owned coarse-node offset, m = coarse block size. Builds the global lower-triangle distributed COO and runs MUMPS analyze+factor (JOB=4). More...
 
subroutine, public hecmw_saamg_cmumps_refresh (cmt, Aloc, my_off, m, naggr_local, cm)
 Numeric refresh: pattern unchanged, only values change. Refill A_loc and run MUMPS numeric factorization (JOB=2, reusing the JOB=1 analysis). More...
 
subroutine, public hecmw_saamg_cmumps_solve (cmt, rhs_loc, n_loc, cm, sol_loc)
 Solve A_coarse x = b. rhs_loc/sol_loc are this rank's owned slices (length n_loc, local owned order = global order on this rank). Gathers RHS to the host, runs MUMPS solve (JOB=3), scatters the owned solution slice back. More...
 
subroutine, public hecmw_saamg_cmumps_free (cm)
 

Detailed Description

Smoothed Aggregation AMG preconditioner : distributed MUMPS coarsest solver.

Alternative coarsest-level backend (F7): a parallel sparse direct factorization of the DISTRIBUTED coarse operator, with NO redundant gather. Each rank feeds its owned coarse rows to MUMPS as distributed assembled input (ICNTL(18)=3, lower triangle, SYM=2) over the level communicator; MUMPS factors in parallel. Per V-cycle the coarse RHS is gathered to the host, solved, and the owned solution slice scattered back. This removes the last O(P) redundant gather so a much larger (sparse) coarsest may be used, keeping the hierarchy shallow.

All MUMPS code is guarded by HECMW_WITH_MUMPS; without it this module compiles to stubs (hecmw_saamg_cmumps_available() = .false.) so the standalone build and MUMPS-less configurations fall back to the dense LDL^T coarsest.

Function/Subroutine Documentation

◆ hecmw_saamg_cmumps_available()

logical function, public hecmw_precond_saamg_coarse_mumps::hecmw_saamg_cmumps_available

.true. only when compiled with MUMPS; the caller uses the dense coarsest else.

Definition at line 57 of file hecmw_precond_SAAMG_coarse_mumps.F90.

Here is the caller graph for this function:

◆ hecmw_saamg_cmumps_free()

subroutine, public hecmw_precond_saamg_coarse_mumps::hecmw_saamg_cmumps_free ( type(hecmwst_saamg_cmumps), intent(inout)  cm)

Definition at line 159 of file hecmw_precond_SAAMG_coarse_mumps.F90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ hecmw_saamg_cmumps_refresh()

subroutine, public hecmw_precond_saamg_coarse_mumps::hecmw_saamg_cmumps_refresh ( type(hecmwst_saamg_comm), intent(in)  cmt,
type(hecmwst_saamg_bcsr), intent(in)  Aloc,
integer(kind=kint), intent(in)  my_off,
integer(kind=kint), intent(in)  m,
integer(kind=kint), intent(in)  naggr_local,
type(hecmwst_saamg_cmumps), intent(inout)  cm 
)

Numeric refresh: pattern unchanged, only values change. Refill A_loc and run MUMPS numeric factorization (JOB=2, reusing the JOB=1 analysis).

Definition at line 125 of file hecmw_precond_SAAMG_coarse_mumps.F90.

Here is the caller graph for this function:

◆ hecmw_saamg_cmumps_setup()

subroutine, public hecmw_precond_saamg_coarse_mumps::hecmw_saamg_cmumps_setup ( type(hecmwst_saamg_comm), intent(in)  cmt,
type(hecmwst_saamg_bcsr), intent(in)  Aloc,
integer(kind=kint), intent(in)  my_off,
integer(kind=kint), intent(in)  m,
integer(kind=kint), intent(in)  naggr_local,
logical, intent(in)  symmetric,
type(hecmwst_saamg_cmumps), intent(inout)  cm 
)

Factor the distributed coarse operator. Aloc = this rank's owned coarse rows (n_loc = naggr_local*m rows, columns localized; global column dof via cmtgnode); my_off = owned coarse-node offset, m = coarse block size. Builds the global lower-triangle distributed COO and runs MUMPS analyze+factor (JOB=4).

Definition at line 69 of file hecmw_precond_SAAMG_coarse_mumps.F90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ hecmw_saamg_cmumps_solve()

subroutine, public hecmw_precond_saamg_coarse_mumps::hecmw_saamg_cmumps_solve ( type(hecmwst_saamg_comm), intent(in)  cmt,
real(kind=kreal), dimension(:), intent(in)  rhs_loc,
integer(kind=kint), intent(in)  n_loc,
type(hecmwst_saamg_cmumps), intent(inout)  cm,
real(kind=kreal), dimension(:), intent(out)  sol_loc 
)

Solve A_coarse x = b. rhs_loc/sol_loc are this rank's owned slices (length n_loc, local owned order = global order on this rank). Gathers RHS to the host, runs MUMPS solve (JOB=3), scatters the owned solution slice back.

Definition at line 144 of file hecmw_precond_SAAMG_coarse_mumps.F90.

Here is the call graph for this function:
Here is the caller graph for this function: