![]() |
FrontISTR
5.9.0
Large-scale structural analysis program with finit element method
|
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... | |
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).
| 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.
| 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.
| 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.
| 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.