FrontISTR  5.9.0
Large-scale structural analysis program with finit element method
hecmw_precond_SAAMG_matrix.F90 File Reference

Go to the source code of this file.

Modules

module  hecmw_precond_saamg_matrix
 Smoothed Aggregation AMG preconditioner : internal block-CSR matrix.
 

Functions/Subroutines

subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_bcsr_free (A)
 Release the storage held by a hecmwST_saamg_bcsr. More...
 
subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_bcsr_copy (A, B)
 Copy: B = A. More...
 
subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_bcsr_move (A, B)
 Move: B = A, transferring A's storage (move_alloc, no copy); A is emptied. Use when the source is no longer needed – avoids holding the operator twice. More...
 
subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_bcsr_from_dense (dense, n, nb, A, mb)
 Build a block-CSR matrix from a dense n x n array. A block is stored when any of its entries is nonzero (the full nb x mb block is kept, in-block zeros and all). Intended for unit tests and small reference matrices, not production. More...
 
subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_matvec (A, x, y)
 Sparse matrix-vector product : y = A x. More...
 
subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_matvec_d (cmt, A, x, y)
 Distributed matvec y = A x : refresh x's halo region from the owning ranks (via the level comm table), then run the local product. x must have length nb*nnode (internal + halo room); y has length An = nb*nint (internal rows). Reduces to hecmw_saamg_matvec when the comm table has no neighbors (serial). More...
 
real(kind=kreal) function, public hecmw_precond_saamg_matrix::hecmw_saamg_is_symmetric (A)
 Relative asymmetry ||A - A^T||_F / ||A||_F (debug / verification helper). Returns 0 for a structurally and numerically symmetric matrix. Square only. More...
 
subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_bcsr_from_triplets (nrow, ncol, nb, ti, tj, tv, nt, A, mb)
 Assemble a block-CSR (nrow x ncol) from a scalar triplet list (i,j,v): each entry is scattered into its block (block row (i-1)/nb+1, block col (j-1)/mb+1, in-block position), duplicate entries summed. Used by the distributed operator assembly (routed scalar triplets -> owned block rows). More...
 
subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_bcsr_from_block_triplets (nbrow, nbcol, nb, mb, bi, bj, bv, nt, A)
 Assemble a block-CSR (nbrow x nbcol block grid, nb x mb blocks) from a list of block triplets (bi, bj, block); duplicate (bi,bj) blocks are summed. Each block bv(:,t) is the nb*mb column-major entries of block t. The block-native assembler used by the operator producers (adapter, tentative, smoothed prolongator). More...
 
subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_bcsr_transpose (A, At)
 Transpose: At = A^T (At is ncol x n). More...
 
subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_spgemm (A, B, C)
 Sparse matrix-matrix product C = A * B. Requires Amb == Bnb. More...
 
subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_galerkin_local (A, P, mblk, Ac)
 Galerkin coarse operator Ac = P^T A P. mblk = coarse block size. More...
 
subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_bcsr_to_dense (A, dense)
 Densify a matrix into a (n x ncol) array (verification helper). More...
 
subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_to_dense_blk (A, dense)
 Densify from the block-CSR storage. More...
 
subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_matvec_blk (A, x, y)
 Block matvec y = A x (x indexed by column blocks, y by row blocks). More...
 
subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_transpose_blk (A, At)
 Block transpose At = A^T : swap block dims and transpose each block. More...
 
subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_spgemm_blk (A, B, C)
 Block SpGEMM C = A * B : block Gustavson with dense block GEMM accumulation. Requires Amb == Bnb (inner block dimension). More...
 
subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_galerkin_blk (A, P, mblk, Ac)
 Block Galerkin Ac = P^T A P (block transpose + two block SpGEMM). mblk = coarse block size, tagged on Acnb / Acmb. More...
 
subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_transpose_blk_rows (A, nbrow_keep, At)
 Transpose only the first nbrow_keep block rows of A : At = (A[1:nbrow_keep])^T. Used to form the restriction P^T from the internal rows of the halo-extended prolongator without first copying out those rows. More...
 
subroutine, public hecmw_precond_saamg_matrix::hecmw_saamg_triple_blk (L, A, R, Ac)
 FUSED block triple product Ac = L * A * R, computed WITHOUT materializing the intermediate A*R (or L*A): the i -> j(L) -> k(A) -> l(R) loop accumulates the block products L(i,j) A(j,k) R(k,l) directly into Ac(i,l) (modelled on the FrontISTR T^t K T product). Only a small per-(i,j,k) temporary L*A is held, so the large A*R intermediate is never formed – critical for the level-1 Galerkin P^T A P on huge meshes. Requires Lmb==Anb, Amb==Rnb (and matching counts). More...