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

Smoothed Aggregation AMG preconditioner : prolongation. More...

Functions/Subroutines

subroutine, public hecmw_saamg_tentative (bfine, n, m, nb, aggr, naggr, phat, bcoarse)
 Build P-hat (n x naggr*m block-CSR) and B_coarse (naggr*m x m) from B_fine. More...
 
subroutine, public hecmw_saamg_smooth_prolongator (A, D, omega, phat, p)
 Smoothed prolongator P = P-hat - omega * D^{-1} (A P-hat), via SpGEMM. Computes A*P-hat once as a sparse product (instead of one full A-matvec per coarse column, which is O(ncoarse * nnz_A)), applies the block-diagonal D^{-1} row-wise, then forms the sparse difference by summing triplets. More...
 

Detailed Description

Smoothed Aggregation AMG preconditioner : prolongation.

Two operations:

  • tentative prolongator P-hat and coarse near-kernel B via per-aggregate thin Householder QR (LAPACK dgeqrf/dorgqr): B_k = Q_k R_k, Q_k -> P-hat block column k, R_k -> B_coarse block row k. By construction P-hat * B_coarse = B_fine and P-hat^T P-hat = I.
  • prolongator smoothing P = (I - omega D^{-1} A) P-hat, computed column by column reusing the tested matvec and block-diagonal solve (a SpGEMM-based path is a later optimization).

Coarse layout: aggregate k becomes coarse node k with m dofs; coarse dof (k-1)*m + c. Excluded nodes (aggr=0) get an all-zero P-hat row.

Function/Subroutine Documentation

◆ hecmw_saamg_smooth_prolongator()

subroutine, public hecmw_precond_saamg_prolongation::hecmw_saamg_smooth_prolongator ( type(hecmwst_saamg_bcsr), intent(in)  A,
type(hecmwst_saamg_blockdiag), intent(in)  D,
real(kind=kreal), intent(in)  omega,
type(hecmwst_saamg_bcsr), intent(in)  phat,
type(hecmwst_saamg_bcsr), intent(out)  p 
)

Smoothed prolongator P = P-hat - omega * D^{-1} (A P-hat), via SpGEMM. Computes A*P-hat once as a sparse product (instead of one full A-matvec per coarse column, which is O(ncoarse * nnz_A)), applies the block-diagonal D^{-1} row-wise, then forms the sparse difference by summing triplets.

Definition at line 146 of file hecmw_precond_SAAMG_prolongation.F90.

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

◆ hecmw_saamg_tentative()

subroutine, public hecmw_precond_saamg_prolongation::hecmw_saamg_tentative ( real(kind=kreal), dimension(n, m), intent(in)  bfine,
integer(kind=kint), intent(in)  n,
integer(kind=kint), intent(in)  m,
integer(kind=kint), intent(in)  nb,
integer(kind=kint), dimension(:), intent(in)  aggr,
integer(kind=kint), intent(in)  naggr,
type(hecmwst_saamg_bcsr), intent(out)  phat,
real(kind=kreal), dimension(:,:), intent(out), allocatable  bcoarse 
)

Build P-hat (n x naggr*m block-CSR) and B_coarse (naggr*m x m) from B_fine.

Definition at line 32 of file hecmw_precond_SAAMG_prolongation.F90.

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