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 thr times 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, 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#

src/ksp/pc/impls/gamg/agg.c

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