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

Smoothed Aggregation AMG preconditioner : node graph + aggregation. More...

Functions/Subroutines

subroutine, public hecmw_saamg_build_nodegraph (A, g, theta)
 Build the node graph from the block-CSR operator A. With theta (optional) > 0, apply a strength-of-connection filter: an off-diagonal node-block (I,J) is an edge only if its Frobenius norm is strong relative to the diagonal blocks, ||A_IJ||_F >= theta * sqrt(||A_II||_F * ||A_JJ||_F). theta absent or <= 0 reproduces the structural graph (every nonzero block is an edge), matching the original theta=0 behavior. More...
 
subroutine, public hecmw_saamg_nodegraph_free (g)
 
subroutine, public hecmw_saamg_write_vtk (fname, coord, nnode, aggr)
 Write a legacy-VTK point cloud colored by aggregate id (ParaView diagnostic). coord is (x,y,z) interleaved, length 3*nnode; aggr(i) in 0..naggr (0=excluded). More...
 
subroutine, public hecmw_saamg_aggregate (g, min_size, max_size, aggr, naggr, order_mode, gid)
 Vanek 3-phase aggregation + min-size forced merge. aggr(1:n): 1..naggr for aggregated nodes, 0 for excluded nodes. order_mode (optional): phase-1 seed-scan ordering. Phase 1 builds a distance-2 maximal independent set of seeds – the only freedom is WHICH admissible seed is taken first, and that decides the aggregate shapes: 0/absent = natural node order (legacy; kept as the no-argument default so the standalone harness stays bit-stable), 1 = BFS (graph) order (the production default via prmagg_order: contiguous tiling -> uniform aggregates, much better on badly numbered meshes), 2 = hash order of gid (deterministic pseudo-random; with global ids the seed priority is partition-independent), 3 = min-degree first, 4 = max-degree first. gid: node ids for mode 2. More...
 

Detailed Description

Smoothed Aggregation AMG preconditioner : node graph + aggregation.

Builds the node-block strong-coupling graph (theta=0 default: a block nonzero is an edge) and runs the Vanek 3-phase greedy aggregation, followed by the "no small aggregates" forced merge (every aggregate ends with >= min_size nodes). All processing is node-based: dofs of one node are never split.

Output: aggr(inode) = aggregate id in 1..naggr, or 0 for an excluded node (no off-diagonal coupling -> Dirichlet/isolated; no coarse representative).

Function/Subroutine Documentation

◆ hecmw_saamg_aggregate()

subroutine, public hecmw_precond_saamg_aggregate::hecmw_saamg_aggregate ( type(hecmwst_saamg_nodegraph), intent(in)  g,
integer(kind=kint), intent(in)  min_size,
integer(kind=kint), intent(in)  max_size,
integer(kind=kint), dimension(:), intent(out), allocatable  aggr,
integer(kind=kint), intent(out)  naggr,
integer(kind=kint), intent(in), optional  order_mode,
integer(kind=kint), dimension(:), intent(in), optional  gid 
)

Vanek 3-phase aggregation + min-size forced merge. aggr(1:n): 1..naggr for aggregated nodes, 0 for excluded nodes. order_mode (optional): phase-1 seed-scan ordering. Phase 1 builds a distance-2 maximal independent set of seeds – the only freedom is WHICH admissible seed is taken first, and that decides the aggregate shapes: 0/absent = natural node order (legacy; kept as the no-argument default so the standalone harness stays bit-stable), 1 = BFS (graph) order (the production default via prmagg_order: contiguous tiling -> uniform aggregates, much better on badly numbered meshes), 2 = hash order of gid (deterministic pseudo-random; with global ids the seed priority is partition-independent), 3 = min-degree first, 4 = max-degree first. gid: node ids for mode 2.

Definition at line 295 of file hecmw_precond_SAAMG_aggregate.f90.

Here is the caller graph for this function:

◆ hecmw_saamg_build_nodegraph()

subroutine, public hecmw_precond_saamg_aggregate::hecmw_saamg_build_nodegraph ( type(hecmwst_saamg_bcsr), intent(in)  A,
type(hecmwst_saamg_nodegraph), intent(out)  g,
real(kind=kreal), intent(in), optional  theta 
)

Build the node graph from the block-CSR operator A. With theta (optional) > 0, apply a strength-of-connection filter: an off-diagonal node-block (I,J) is an edge only if its Frobenius norm is strong relative to the diagonal blocks, ||A_IJ||_F >= theta * sqrt(||A_II||_F * ||A_JJ||_F). theta absent or <= 0 reproduces the structural graph (every nonzero block is an edge), matching the original theta=0 behavior.

Definition at line 42 of file hecmw_precond_SAAMG_aggregate.f90.

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

◆ hecmw_saamg_nodegraph_free()

subroutine, public hecmw_precond_saamg_aggregate::hecmw_saamg_nodegraph_free ( type(hecmwst_saamg_nodegraph), intent(inout)  g)

Definition at line 147 of file hecmw_precond_SAAMG_aggregate.f90.

Here is the caller graph for this function:

◆ hecmw_saamg_write_vtk()

subroutine, public hecmw_precond_saamg_aggregate::hecmw_saamg_write_vtk ( character(len=*), intent(in)  fname,
real(kind=kreal), dimension(:), intent(in)  coord,
integer(kind=kint), intent(in)  nnode,
integer(kind=kint), dimension(:), intent(in)  aggr 
)

Write a legacy-VTK point cloud colored by aggregate id (ParaView diagnostic). coord is (x,y,z) interleaved, length 3*nnode; aggr(i) in 0..naggr (0=excluded).

Definition at line 157 of file hecmw_precond_SAAMG_aggregate.f90.

Here is the caller graph for this function: