![]() |
FrontISTR
6.0.0
Large-scale structural analysis program with finit element method
|
Go to the source code of this file.
Modules | |
| module | hecmw_mf_dist |
| MPI distribution layer of the multifrontal solver: the supernode-to-rank mapping and the broadcast of the symbolic structure. Every rank computes the mapping from the (identical) symbolic structure alone, without communication. | |
Functions/Subroutines | |
| subroutine, public | hecmw_mf_dist::hecmw_mf_dist_map_build (sym, map) |
| Build the mapping from the symbolic structure. The roots share all ranks (several roots split them proportionally to the subtree weights, factorization flops estimates); an upper front assigns the subtrees below it by promotion and packing: a subtree heavier than the promotion threshold becomes an upper front on the same rank range and hands its children down to the pool, and the remaining subtrees are packed greedily onto the least loaded rank of the range (LPT). The result is deterministic and identical on every rank. The owner of an upper front is the owner of its heaviest child subtree, keeping the fan-in communication local to the subcube. More... | |
| subroutine, public | hecmw_mf_dist::hecmw_mf_dist_map_finalize (map) |
| subroutine, public | hecmw_mf_dist::hecmw_mf_dist_rowtiles (sym, map, tile, s, ndel, ncbt, ctb, towner) |
| Contribution row tiles of upper front s and their owning ranks. The boundaries ctb (0:ncbt) are offsets from the end of the fully summed part; they reproduce the front partition of the numeric stage, whose cuts beyond the fully summed part shift with the delayed growth ndel without changing, so senders and receivers of a contribution slice derive the same tiles before the front exists. Contiguous tile blocks go to the ranks of s proportionally to the trailing update weight rows x band width of a tile: contiguous, unlike a cyclic assignment, keeps the owner changes along an ascending tile walk (the backward solve token chain) at one per rank. More... | |
| subroutine, public | hecmw_mf_dist::hecmw_mf_dist_fsgrid (map, s, ntc, pr, pc) |
| 2D process grid pr x pc of the fully summed part of upper front s, from its fully summed tile count ntc (known to every rank of s after the child headers). The grid grows with the tile count at MF_2D_FSTPR tiles per rank up to the rank set of s and stays near square with pr >= pc; a 1 x 1 grid keeps the fully summed part on the master, reproducing the undistributed layout. More... | |
| integer(kind=kint) function, public | hecmw_mf_dist::hecmw_mf_dist_fsrank (map, s, pr, pc, i, j) |
| Owning rank of fully summed tile (i, j), j <= i, of upper front s on its pr x pc grid: block cyclic over the tile coordinates, the grid ranks being the ranks of s in ascending order with the master moved to the front (so grid position 0 is the master). More... | |
| subroutine, public | hecmw_mf_dist::hecmw_mf_dist_symbolic_bcast (sym, root) |
| Broadcast the symbolic structure built on the root rank to all ranks. The int8 estimates (factor_nnz, flops) are not transferred: nothing reads them off the root. More... | |
| subroutine, public | hecmw_mf_dist::hecmw_mf_dist_gmat_build (hecMESH, hecMAT, gmat) |
| Gather the nonzero structure of the internal rows of every rank. The stream carries, per row, the neighbor count and the global column ids, and is kept in gmat until hecmw_mf_dist_gmat_part derives the partial profile and the value routing from it; only rank 0 builds the full matrix profile (structure only, the columns of a row sorted ascending), which the ordering and the symbolic stage read. More... | |
| subroutine, public | hecmw_mf_dist::hecmw_mf_dist_gmat_part (sym, map, gmat) |
| Derive from the mapping the partial profile of this rank and the value routing, and drop the gathered structure stream (rank 0 also drops the full profile the ordering has read). A block pair belongs to the supernode of its earlier column and is held by the rank set of that supernode, a delay-proof superset of the per-entry owners; the index arrays keep the full length, the retained columns of a row are sorted ascending like the full profile, and D stays full length with the dropped blocks zeroed. The send and receive lists both enumerate the blocks of a source in its stream order, so the value transfer needs no structure traffic. More... | |
| subroutine, public | hecmw_mf_dist::hecmw_mf_dist_gmat_vals (hecMAT, gmat) |
| Move the values of the internal rows to their holding ranks through the routing of hecmw_mf_dist_gmat_part (built once per structure): the local block stream is packed by destination, exchanged all to all and scattered into the partial arrays. Every retained slot is written on every call. More... | |
| subroutine, public | hecmw_mf_dist::hecmw_mf_dist_gmat_words (gmat, wpart, wrepl) |
| Words this rank holds for the matrix (the values with the integer structure and routing at two integers per word) and the words the replicated design held per rank, for the memory log. More... | |
| subroutine, public | hecmw_mf_dist::hecmw_mf_dist_gmat_extract (full, sym, map, part) |
| Extract from the replicated matrix the part this rank reads under the distribution: the block pairs of the own columns of its supernodes. A pair belongs to the supernode of its earlier column in the elimination order; a single-rank supernode keeps its pairs on its rank, an upper front on its whole rank set, a superset of the per-entry owners that stays valid under any delayed growth. The index arrays keep the full length and the retained blocks keep their original order within a row, so the factorization reads bitwise the same values; D stays full length with the dropped blocks zeroed, an O(n) vector-class array indexed in place by the shared assembly. More... | |
| subroutine, public | hecmw_mf_dist::hecmw_mf_dist_gather_vec (gmat, v, gv) |
| Gather the internal parts of a distributed nodal vector into the replicated global vector, in the global node numbering. More... | |
| subroutine, public | hecmw_mf_dist::hecmw_mf_dist_gmat_finalize (gmat) |