PCGAMGSetProlongatorFilter#
Set the relative threshold for block filtering of the prolongator (a kernel-preserving correction is applied afterward)
Synopsis#
#include "petscpc.h"
PetscErrorCode PCGAMGSetProlongatorFilter(PC pc, PetscReal thr)
Logically Collective
Input Parameters#
pc - the preconditioner context
thr - relative threshold in [0,1); the block of prolongator entries coupling a fine node to a coarse node is dropped when its Frobenius norm is below
thrtimes the largest such block norm in that fine node’s block row (0 disables filtering)
Options Database Key#
-pc_gamg_prolongator_filter thr - relative threshold for block filtering of the prolongator (0=disabled, 0.01-0.1=typical)
Notes#
Each fine node corresponds to a block of rows (one per degree of freedom of the node, as given by the block size of the operator) and each coarse node to a
block of columns (one per near-null space vector), so the filtering drops small dense sub-blocks of the prolongator, not individual entries. The threshold is
relative to the largest block Frobenius norm in the same fine-node block row so the decision is invariant to the differing scales of the near-null space modes.
The comparison is strict, so the strongest block of a fine node always survives. On coarser levels the threshold is scaled by PCGAMGSetProlongatorFilterScale().
Dropping whole blocks (rather than individual entries) keeps complete coarse-node blocks in every surviving fine row, so the near-null space correction below
remains full rank. The dropped entries are removed from the sparsity pattern with MatEliminateZeros(); on matrix types that do not implement it, and on
HIPSPARSE where it is bypassed due to a known issue, they are zeroed but remain in the pattern, so the coarse operators are unchanged in structure and the
complexity and memory reduction is not realized (reported with -info).
After filtering, each row of the prolongator is corrected so that the filtered prolongator still reproduces the near-null space exactly, that is, P applied to the coarse representation of the near-null space equals the fine near-null space. With a single near-null space vector each row is simply rescaled; with several, a small symmetric positive-definite system (of size the number of near-null space vectors) is solved for each row and the resulting correction, a combination of the coarse near-null space vectors, is added to the surviving entries of the row. Rows with fewer surviving entries than near-null space vectors are left uncorrected, as are, in the single-vector case, rows whose near-null space entry is zero or whose required scale factor would be extremely large (an empty or nearly empty filtered row).
See Also#
the Users Manual section on PCGAMG, the Users Manual section on PCMG, KSP: Linear System Solvers, PCGAMG, PCGAMGGetProlongatorFilter(), PCGAMGSetProlongatorFilterScale(), PCGAMGSetLowMemoryFilter()
Level#
intermediate
Location#
Implementations#
PCGAMGSetProlongatorFilter_AGG() in src/ksp/pc/impls/gamg/agg.c
Index of all PC routines
Table of Contents for all manual pages
Index of all manual pages