Functions/Subroutines | |
subroutine | d_bplus_delete (bplus) |
subroutine | d_bplus_copy (bplus_i, bplus_o, memory) |
subroutine | d_bplus_copy_delete (bplus_i, bplus_o, memory) |
subroutine | d_bplus_extract_partial (bplus_i, ll_s, row_group, agent_bplus, msh) |
subroutine | d_bplus_computememory (bplus_i, memory, rank) |
logical function | d_bplus_checknan (bplus_i) |
subroutine | d_hmat_parallelblock_mvp_dat (blocks_1, chara, M, N, Nrnd, random1, ldi, random2, ldo, a, b, ptree, stats) |
subroutine | d_bp_mult (BP, chara, xin, xout, Ninloc, Noutloc, Ncol, ptree, stats) |
subroutine | d_bplus_block_mvp_dat (bplus, chara, M, N, Nrnd, random1, ldi, random2, ldo, a, b, ptree, stats, level_start, level_end) |
subroutine | d_bplus_md_block_mvp_dat (Ndim, bplus, chara, M, N, Nrnd, random1, ldi, random2, ldo, a, b, ptree, stats, msh, option, level_start, level_end) |
subroutine | d_bplus_redistribute_inplace (bplus_o, stats, ptree, msh) |
subroutine | d_bf_redistribute_inplace (blocks, pgno_new, stats, ptree, msh) |
subroutine | d_bf_changepattern (blocks, pat_i, pat_o, stats, ptree) |
subroutine | d_bf_delete (blocks, allflag) |
subroutine | d_bf_copy (trans, block_i, block_o, memory) |
subroutine | d_bf_delete_ker_onelevel (ker_o) |
subroutine | d_bf_copy_ker_onelevel (ker_i, ker_o) |
subroutine | d_bf_copy_delete (block_i, block_o, memory) |
subroutine | d_bf_computememory (block_i, memory) |
subroutine | d_bf_md_computememory (Ndim, blocks, memory_dense, memory_comp) |
subroutine | d_bf_md_delete (Ndim, blocks, allflag) |
integer function | d_bf_switchlevel (level_butterfly, pat_comp) |
logical function | d_bf_checknan (block_i) |
subroutine | d_bf_print_size (block_i) |
subroutine | d_bf_print_size_rank (block_i, tolerance) |
subroutine | d_bf_extract_partial (block_o, level_butterfly_loc, ij_loc, head, group, LR, agent_block, pgno, ptree) |
subroutine | d_bf_copyback_partial (block_o, level_butterfly_loc, ij_loc, LR, agent_block, pgno, ptree) |
subroutine | d_bf_copy_partial (block_i, block_o, level_butterfly_loc, ij_loc, LR, memory) |
subroutine | d_bf_partial_mvp_half (block_rand, chara, level_start, level_end, random, num_vect_sub, nth_s, nth_e, Ng) |
subroutine | d_bf_exchange_extraction (blocks, kerls, stats, ptree, level, collect) |
subroutine | d_bf_exchange_matvec (blocks, kerls, stats, ptree, level, mode, collect) |
subroutine | d_bf_all2all_sizes (blocks, sizes, ptree, level, mode, mode_new) |
*********** all to all communication of sizes of one butterfly level from row-wise ordering to column-wise ordering or the reverse More... | |
subroutine | d_bf_all2all_extraction (blocks, kerls, kerls1, stats, ptree, level, mode, mode_new) |
*********** all to all communication of extraction results of one butterfly level from row-wise ordering to column-wise ordering or the reverse More... | |
subroutine | d_bf_all2all_vec_n_ker (blocks, kerls, stats, ptree, nproc, level, mode, mode_new, kerflag) |
***** switching the matvecs/temporary buffer/kernels from row/col distributions to col/row distributions, kerflag=1: kernels, kerflag=0: matvecs and buffer More... | |
subroutine | d_bf_all2all_ker (block_i, pgno_i, kerls_i, level_i, offset_r, offset_c, block_o, pgno_o, kerls_o, level_o, stats, ptree) |
*********** all to all communication of one level of a butterfly from an old process pgno_i to an new process group pgno_o More... | |
subroutine | d_bf_all2all_ker_pattern (block_i, kerls_i, pat_i, block_o, kerls_o, pat_o, level, pgno, stats, ptree) |
*********** all to all communication of one level of a butterfly from an old pattern pat_i to an new pattern pat_o More... | |
subroutine | d_bf_convert_to_smallbf (block_i, block_o, stats, ptree) |
*********** convert blocks in block_isons to block_osons, this is a local function without MPI communication, it is assumed block_isons has L levels, and block_osons will have max(L-2,0) levels More... | |
subroutine | d_bf_all2all_ker_split (block_i, pgno_i, level_i, block_o, pgnos_o, level_o, stats, ptree) |
*********** all to all communication of one level of a butterfly into four children butterflies from an old process pgno_i to an new process group pgno_o More... | |
subroutine | d_bf_all2all_uv (block_i, pgno_i, kerls_i, level_i, offset, block_o, pgno_o, kerls_o, level_o, stats, ptree) |
*********** all to all communication of one level of a butterfly from an old process pgno_i to an new process group pgno_o More... | |
subroutine | d_bf_all2all_u_split (block_i, pgno_i, level_i, block_o, pgnos_o, level_o, stats, ptree) |
*********** all to all communication of one level of a butterfly to four children butterflies from an old process pgno_i to an new process group pgno_o More... | |
subroutine | d_bf_all2all_v_split (block_i, pgno_i, level_i, block_o, pgnos_o, level_o, stats, ptree) |
*********** all to all communication of one level of a butterfly to four children butterflies from an old process pgno_i to an new process group pgno_o More... | |
subroutine | d_bplus_vec_1dto1d (BP, rowcol, one2all, level_s, level_e, ld1, dat_1, Nrnd, vecs, ptree, nproc) |
***** redistribute the input and output vectors in d_Bplus_block_MVP_dat between layout of bplusLL(1)matrices_block(1) to the layout of bplusLL(xx)matrices_block(yy) More... | |
subroutine | d_bplus_md_vec_1dto1d (Ndim, BP, rowcol, one2all, level_s, level_e, ld1, dat_1, Nrnd, vecs, ptree, nproc) |
***** redistribute the input and output vectors in d_Bplus_MD_block_MVP_dat between layout of bplusLL(1)matrices_block(1) to the layout of bplusLL(xx)matrices_block(yy) More... | |
subroutine | d_bf_mult (chara, xin, xout, Ninloc, Noutloc, Ncol, blocks, option, stats, ptree) |
subroutine | d_bf_block_mvp_dat (blocks, chara, M, N, Nrnd, random1, ldi, random2, ldo, a, b, ptree, stats) |
subroutine | d_bf_block_mvp_dat_nonbatch (blocks, chara, M, N, Nrnd, random1, ldi, random2, ldo, a, b, ptree, stats) |
subroutine | d_bf_block_mvp_partial (blocks, chara, num_vectors, VectIn, BFvec, level_end, ptree, stats) |
**** Matvec of partial levels of BF with vectors More... | |
subroutine | d_full_block_extraction (blocks, inters, ptree, msh, stats, option) |
subroutine | d_lr_block_extraction (blocks, inters, ptree, msh, stats) |
subroutine | d_lr_all2all_extraction (blocks, inters, Vpartial, rank, ncol, stats, ptree, msh) |
*********** all to all communication of columns in the V factor from the 1D block column layout to that needed by the 1D block row layout More... | |
subroutine | d_bf_md_block_extraction (blocks, Ndim, Ninter, inters, ptree, msh, stats) |
subroutine | d_bf_md_all2all_extraction (Ndim, blocks, Ninter, inters, BFvec, BFvec_transposed, stats, msh, ptree) |
*********** all to all communication of matvec results at the middle butterfly level from row-wise ordering to column-wise ordering More... | |
subroutine | d_bf_md_all2all_mvp (Ndim, blocks, BFvec, BFvec_transposed, stats, msh, ptree) |
*********** all to all communication of matvec results at the middle butterfly level from row-wise ordering to column-wise ordering More... | |
subroutine | d_bf_md_block_mvp (chara, xin, Ninloc, xout, Noutloc, Nvec, blocks, Ndim, ptree, stats, msh, option) |
subroutine | d_bf_block_extraction (blocks, inters, ptree, msh, stats) |
subroutine | d_bf_block_extraction_multiply_oneblock_right (blocks, BFvec, level, nn, ptree, stats) |
subroutine | d_bf_md_block_extraction_multiply_oneblock_right (blocks, bb_m, Ndim, BFvec, idx_r_m, level, dim_i, ptree, stats) |
subroutine | d_bf_block_extraction_multiply_oneblock_left (blocks, BFvec, level, nn, ptree, stats) |
subroutine | d_bf_md_block_mvp_multiply_right (blocks, bb_m, Ndim, BFvec, Nvec, level, ptree, stats) |
subroutine | d_bf_md_block_mvp_multiply_left (blocks, bb_m, Ndim, BFvec, Nvec, level, ptree, stats) |
subroutine | d_bf_md_block_extraction_multiply_oneblock_left (blocks, bb_m, Ndim, BFvec, idx_c_m, level, dim_i, ptree, stats) |
subroutine | d_bf_block_extraction_sort_oneblock (blocks, BFvec, level, nn, ptree) |
subroutine | d_bf_block_extraction_multiply_oneblock_last (blocks, BFvec, inters, level, nn, ptree, msh, stats) |
integer function | d_findgroup (idx, msh, level, group) |
*** Find the group index of point idx at the (grouplevel+level) level More... | |
integer function | d_findpggroup (idx, msh, ptree, group, pgno) |
*** Find the process group index of point idx in a group More... | |
subroutine | d_bf_value (mi, nj, blocks, value) |
subroutine | d_bf_get_rank (block_i, ptree, level_o) |
subroutine | d_bf_md_get_rank (Ndim, blocks, ptree) |
subroutine | d_bf_sym2asym (blocks) |
subroutine | d_bf_movesingular_ker (blocks, chara, level_start, level_end, ptree, stats, tolerance) |
subroutine | d_bf_movesingulartoleft (blocks) |
subroutine | d_bf_movesingulartoright (blocks) |
subroutine | d_bf_init_blocks (level_butterfly, groupm, groupn, pgno, block_rand, msh, ptree) |
recursive subroutine | d_hmat_block_copy (trans, block2, block1, memory) |
recursive subroutine | d_hmat_block_delete (blocks) |
recursive subroutine | d_hmat_block_computememory (blocks, memory) |
recursive subroutine | d_hmat_lsolve (blocks_l, trans, idx_start, nvec, Vinout, ld, ptree, stats) |
recursive subroutine | d_hmat_usolve (blocks_u, trans, idx_start, nvec, Vinout, ld, ptree, stats) |
recursive subroutine | d_hmat_block_mvp_dat (blocks, trans, idx_start_m, idx_start_n, Nrnd, Vin, ldi, Vout, ldo, a, ptree, stats, level_start, level_end) |
subroutine | d_full_block_mvp_dat (blocks, chara, M, num_vectors, random1, ldi, random2, ldo, a, b) |
**** Multiply with dense blocks. More... | |
subroutine | d_full_block_md_mvp_dat (blocks, chara, M, num_vectors, random1, ldi, random2, ldo, a, b) |
**** Multiply with dense blocks (as tensor). This is the same as d_Full_block_MVP_dat, except that blocks needs to be type(d_matrixblock_MD) More... | |
subroutine | d_computeparallelindices_md (block, pgno, Ndim, ptree, msh) |
subroutine | d_computeparallelindices (block, pgno, ptree, msh) |
subroutine | d_computeparallelindicessub (base_group, pgno, ptree, msh, MN_p) |
real(kind=8) function | d_node_score_block_ptr_row (this) |
real(kind=8) function | d_nod_score_ipair (this) |
subroutine | d_element_zmn_block_user (nrow, ncol, mrange, nrange, values, msh, option, ker, myflag, passflag, ptree, stats) |
subroutine | d_element_zmn_blocklist_user (submats, Nsub, msh, option, ker, myflag, passflag, ptree, stats, alldat_loc_in) |
subroutine | d_element_zmn_tensorlist_user (Ndim, subtensors, Nsub, msh, option, ker, myflag, passflag, ptree, stats, zfpquants) |
subroutine d_bplus_utilities::d_bf_all2all_extraction | ( | type(d_matrixblock) | blocks, |
type(d_butterfly_kerl) | kerls, | ||
type(d_butterfly_kerl) | kerls1, | ||
type(d_hstat) | stats, | ||
type(d_proctree) | ptree, | ||
integer | level, | ||
character | mode, | ||
character | mode_new | ||
) |
*********** all to all communication of extraction results of one butterfly level from row-wise ordering to column-wise ordering or the reverse
subroutine d_bplus_utilities::d_bf_all2all_ker | ( | type(d_matrixblock) | block_i, |
integer | pgno_i, | ||
type(d_butterfly_kerl) | kerls_i, | ||
integer | level_i, | ||
integer | offset_r, | ||
integer | offset_c, | ||
type(d_matrixblock) | block_o, | ||
integer | pgno_o, | ||
type(d_butterfly_kerl) | kerls_o, | ||
integer | level_o, | ||
type(d_hstat) | stats, | ||
type(d_proctree) | ptree | ||
) |
*********** all to all communication of one level of a butterfly from an old process pgno_i to an new process group pgno_o
subroutine d_bplus_utilities::d_bf_all2all_ker_pattern | ( | type(d_matrixblock) | block_i, |
type(d_butterfly_kerl) | kerls_i, | ||
integer | pat_i, | ||
type(d_matrixblock) | block_o, | ||
type(d_butterfly_kerl) | kerls_o, | ||
integer | pat_o, | ||
integer | level, | ||
integer | pgno, | ||
type(d_hstat) | stats, | ||
type(d_proctree) | ptree | ||
) |
*********** all to all communication of one level of a butterfly from an old pattern pat_i to an new pattern pat_o
subroutine d_bplus_utilities::d_bf_all2all_ker_split | ( | type(d_matrixblock) | block_i, |
integer | pgno_i, | ||
integer | level_i, | ||
type(d_matrixblock) | block_o, | ||
integer, dimension(2,2) | pgnos_o, | ||
integer | level_o, | ||
type(d_hstat) | stats, | ||
type(d_proctree) | ptree | ||
) |
*********** all to all communication of one level of a butterfly into four children butterflies from an old process pgno_i to an new process group pgno_o
subroutine d_bplus_utilities::d_bf_all2all_sizes | ( | type(d_matrixblock) | blocks, |
type(d_butterfly_skel) | sizes, | ||
type(d_proctree) | ptree, | ||
integer | level, | ||
character | mode, | ||
character | mode_new | ||
) |
*********** all to all communication of sizes of one butterfly level from row-wise ordering to column-wise ordering or the reverse
subroutine d_bplus_utilities::d_bf_all2all_u_split | ( | type(d_matrixblock) | block_i, |
integer | pgno_i, | ||
integer | level_i, | ||
type(d_matrixblock) | block_o, | ||
integer, dimension(2,2) | pgnos_o, | ||
integer | level_o, | ||
type(d_hstat) | stats, | ||
type(d_proctree) | ptree | ||
) |
*********** all to all communication of one level of a butterfly to four children butterflies from an old process pgno_i to an new process group pgno_o
subroutine d_bplus_utilities::d_bf_all2all_uv | ( | type(d_matrixblock) | block_i, |
integer | pgno_i, | ||
type(d_butterfly_uv) | kerls_i, | ||
integer | level_i, | ||
integer | offset, | ||
type(d_matrixblock) | block_o, | ||
integer | pgno_o, | ||
type(d_butterfly_uv) | kerls_o, | ||
integer | level_o, | ||
type(d_hstat) | stats, | ||
type(d_proctree) | ptree | ||
) |
*********** all to all communication of one level of a butterfly from an old process pgno_i to an new process group pgno_o
subroutine d_bplus_utilities::d_bf_all2all_v_split | ( | type(d_matrixblock) | block_i, |
integer | pgno_i, | ||
integer | level_i, | ||
type(d_matrixblock) | block_o, | ||
integer, dimension(2,2) | pgnos_o, | ||
integer | level_o, | ||
type(d_hstat) | stats, | ||
type(d_proctree) | ptree | ||
) |
*********** all to all communication of one level of a butterfly to four children butterflies from an old process pgno_i to an new process group pgno_o
subroutine d_bplus_utilities::d_bf_all2all_vec_n_ker | ( | type(d_matrixblock) | blocks, |
type(d_butterfly_kerl) | kerls, | ||
type(d_hstat) | stats, | ||
type(d_proctree) | ptree, | ||
integer | nproc, | ||
integer | level, | ||
character | mode, | ||
character | mode_new, | ||
integer | kerflag | ||
) |
***** switching the matvecs/temporary buffer/kernels from row/col distributions to col/row distributions, kerflag=1: kernels, kerflag=0: matvecs and buffer
subroutine d_bplus_utilities::d_bf_block_extraction | ( | type(d_matrixblock) | blocks, |
type(d_intersect), dimension(:) | inters, | ||
type(d_proctree) | ptree, | ||
type(d_mesh) | msh, | ||
type(d_hstat) | stats | ||
) |
******* preallocate BFvec and BFvec1, number of blocks are exactly those in d_BF_block_MVP_dat, BFvec for the first 0:level_half+1 levels and BFvec for the next level_half+1 to level_butterfly+2 levels,note that level level_half+1 is duplicated for all2all communication
**** compute group_ms and group_ns which stores the leaf block number (from 1 to 2^L) of each index. group_ms1 and group_ns1 are used to track the block number in each butterfly level.
**** compute g_idx_m and g_idx_n which stores the local (with halo) blocks for the block rows and columns
*** for each index in each intersection, traverse the row and column tree
**** construct BFvecvec(level)lst for active BF blocks and BFvecvec(level)blocks(index_i_loc_s,index_j_loc_s)lst for d_list of intersection::s
**** copy *lst to *index
**** compute g_idx_m and g_idx_n which stores the local (with halo) blocks for the block rows and columns
**** compute g_idx_m and g_idx_n which stores the local (with halo) blocks for the block rows and columns
*** for each index in each intersection, traverse the row and column tree
**** construct BFvec1vec(level)lst for active BF blocks and BFvec1vec(level)blocks(index_i_loc_s,index_j_loc_s)lst for d_list of intersection::s
**** copy *lst to *index
**** create a d_list of row_loc indices for each block of BFvec1vec(level_butterfly+2),note that BFvec1vec(level)blocks(index_i_loc_s,1)lst and BFvec1vec(level)blocks(index_i_loc_s,1)index are used at this level compared to other levels
*** for each index in each intersection, traverse the row and column tree
**** copy *lst to *index
**** generate data in BFvecvec(0)
**** multiply BF with BFvec
**** multiply BF with BFvec1
subroutine d_bplus_utilities::d_bf_block_extraction_multiply_oneblock_last | ( | type(d_matrixblock) | blocks, |
type(d_butterfly_vec) | BFvec, | ||
type(d_intersect), dimension(:) | inters, | ||
integer | level, | ||
integer | nn, | ||
type(d_proctree) | ptree, | ||
type(d_mesh) | msh, | ||
type(d_hstat) | stats | ||
) |
subroutine d_bplus_utilities::d_bf_block_extraction_multiply_oneblock_left | ( | type(d_matrixblock) | blocks, |
type(d_butterfly_vec) | BFvec, | ||
integer | level, | ||
integer | nn, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats | ||
) |
subroutine d_bplus_utilities::d_bf_block_extraction_multiply_oneblock_right | ( | type(d_matrixblock) | blocks, |
type(d_butterfly_vec) | BFvec, | ||
integer | level, | ||
integer | nn, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats | ||
) |
**** filter out the columns of mat1 and mat2 that are not specified by BFvecvec(level)blocks(index_i_loc_s,index_j_loc_s)index
subroutine d_bplus_utilities::d_bf_block_extraction_sort_oneblock | ( | type(d_matrixblock) | blocks, |
type(d_butterfly_vec) | BFvec, | ||
integer | level, | ||
integer | nn, | ||
type(d_proctree) | ptree | ||
) |
**** filter out the columns of mat1 and mat2 that are not specified by BFvecvec(level)blocks(index_i_loc_s,index_j_loc_s)index
subroutine d_bplus_utilities::d_bf_block_mvp_dat | ( | type(d_matrixblock) | blocks, |
character | chara, | ||
integer | M, | ||
integer | N, | ||
integer | Nrnd, | ||
real(kind=8), dimension(ldi, *) | random1, | ||
integer | ldi, | ||
real(kind=8), dimension(ldo, *) | random2, | ||
integer | ldo, | ||
real(kind=8) | a, | ||
real(kind=8) | b, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats | ||
) |
subroutine d_bplus_utilities::d_bf_block_mvp_dat_nonbatch | ( | type(d_matrixblock) | blocks, |
character | chara, | ||
integer | M, | ||
integer | N, | ||
integer | Nrnd, | ||
real(kind=8), dimension(ldi, *) | random1, | ||
integer | ldi, | ||
real(kind=8), dimension(ldo, *) | random2, | ||
integer | ldo, | ||
real(kind=8) | a, | ||
real(kind=8) | b, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats | ||
) |
subroutine d_bplus_utilities::d_bf_block_mvp_partial | ( | type(d_matrixblock) | blocks, |
character | chara, | ||
integer | num_vectors, | ||
real(kind=8), dimension(:, :) | VectIn, | ||
type(d_butterfly_vec) | BFvec, | ||
integer | level_end, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats | ||
) |
**** Matvec of partial levels of BF with vectors
subroutine d_bplus_utilities::d_bf_changepattern | ( | type(d_matrixblock) | blocks, |
integer | pat_i, | ||
integer | pat_o, | ||
type(d_hstat) | stats, | ||
type(d_proctree) | ptree | ||
) |
*** make sure every process has blocksButterflyKerl allocated
*** delete dummy blocksButterflyKerl if I don't share the output butterfly
logical function d_bplus_utilities::d_bf_checknan | ( | type(d_matrixblock) | block_i | ) |
subroutine d_bplus_utilities::d_bf_computememory | ( | type(d_matrixblock) | block_i, |
real(kind=8) | memory | ||
) |
subroutine d_bplus_utilities::d_bf_convert_to_smallbf | ( | type(d_matrixblock) | block_i, |
type(d_matrixblock) | block_o, | ||
type(d_hstat) | stats, | ||
type(d_proctree) | ptree | ||
) |
*********** convert blocks in block_isons to block_osons, this is a local function without MPI communication, it is assumed block_isons has L levels, and block_osons will have max(L-2,0) levels
subroutine d_bplus_utilities::d_bf_copy | ( | character | trans, |
type(d_matrixblock) | block_i, | ||
type(d_matrixblock) | block_o, | ||
real(kind=8), optional | memory | ||
) |
subroutine d_bplus_utilities::d_bf_copy_delete | ( | type(d_matrixblock) | block_i, |
type(d_matrixblock) | block_o, | ||
real(kind=8), optional | memory | ||
) |
subroutine d_bplus_utilities::d_bf_copy_ker_onelevel | ( | type(d_butterfly_kerl) | ker_i, |
type(d_butterfly_kerl) | ker_o | ||
) |
subroutine d_bplus_utilities::d_bf_copy_partial | ( | type(d_matrixblock) | block_i, |
type(d_matrixblock) | block_o, | ||
integer | level_butterfly_loc, | ||
integer | ij_loc, | ||
character | LR, | ||
real(kind=8), optional | memory | ||
) |
subroutine d_bplus_utilities::d_bf_copyback_partial | ( | type(d_matrixblock) | block_o, |
integer | level_butterfly_loc, | ||
integer | ij_loc, | ||
character | LR, | ||
type(d_matrixblock) | agent_block, | ||
integer | pgno, | ||
type(d_proctree) | ptree | ||
) |
subroutine d_bplus_utilities::d_bf_delete | ( | type(d_matrixblock) | blocks, |
integer | allflag | ||
) |
subroutine d_bplus_utilities::d_bf_delete_ker_onelevel | ( | type(d_butterfly_kerl) | ker_o | ) |
subroutine d_bplus_utilities::d_bf_exchange_extraction | ( | type(d_matrixblock) | blocks, |
type(d_butterfly_kerl) | kerls, | ||
type(d_hstat) | stats, | ||
type(d_proctree) | ptree, | ||
integer | level, | ||
character | collect | ||
) |
subroutine d_bplus_utilities::d_bf_exchange_matvec | ( | type(d_matrixblock) | blocks, |
type(d_butterfly_kerl) | kerls, | ||
type(d_hstat) | stats, | ||
type(d_proctree) | ptree, | ||
integer | level, | ||
character | mode, | ||
character | collect | ||
) |
subroutine d_bplus_utilities::d_bf_extract_partial | ( | type(d_matrixblock) | block_o, |
integer | level_butterfly_loc, | ||
integer | ij_loc, | ||
integer | head, | ||
integer | group, | ||
character | LR, | ||
type(d_matrixblock) | agent_block, | ||
integer | pgno, | ||
type(d_proctree) | ptree | ||
) |
*********** compute M_p, N_p, ms, ns, M and N
subroutine d_bplus_utilities::d_bf_get_rank | ( | type(d_matrixblock) | block_i, |
type(d_proctree) | ptree, | ||
integer, optional | level_o | ||
) |
subroutine d_bplus_utilities::d_bf_init_blocks | ( | integer | level_butterfly, |
integer | groupm, | ||
integer | groupn, | ||
integer | pgno, | ||
type(d_matrixblock) | block_rand, | ||
type(d_mesh) | msh, | ||
type(d_proctree) | ptree | ||
) |
****** row-wise ordering from right side
****** column-wise ordering from left side
subroutine d_bplus_utilities::d_bf_md_all2all_extraction | ( | integer | Ndim, |
type(d_matrixblock_md) | blocks, | ||
integer | Ninter, | ||
type(d_intersect_md), dimension(ninter) | inters, | ||
type(d_butterfly_vec), dimension(:,:) | BFvec, | ||
type(d_butterfly_vec), dimension(:,:) | BFvec_transposed, | ||
type(d_hstat) | stats, | ||
type(d_mesh), dimension(ndim) | msh, | ||
type(d_proctree) | ptree | ||
) |
*********** all to all communication of matvec results at the middle butterfly level from row-wise ordering to column-wise ordering
subroutine d_bplus_utilities::d_bf_md_all2all_mvp | ( | integer | Ndim, |
type(d_matrixblock_md) | blocks, | ||
type(d_butterfly_vec), dimension(:) | BFvec, | ||
type(d_butterfly_vec), dimension(:) | BFvec_transposed, | ||
type(d_hstat) | stats, | ||
type(d_mesh), dimension(ndim) | msh, | ||
type(d_proctree) | ptree | ||
) |
*********** all to all communication of matvec results at the middle butterfly level from row-wise ordering to column-wise ordering
subroutine d_bplus_utilities::d_bf_md_block_extraction | ( | type(d_matrixblock_md) | blocks, |
integer | Ndim, | ||
integer | Ninter, | ||
type(d_intersect_md), dimension(ninter) | inters, | ||
type(d_proctree) | ptree, | ||
type(d_mesh), dimension(ndim) | msh, | ||
type(d_hstat) | stats | ||
) |
**** Step 1: multiply the factor matrices out from outtermost to middle level along each dimension ******* preallocate BFvec and BFvec1, number of blocks are exactly those in d_BF_block_MVP_dat, BFvec for the first 0:level_half+1 levels and BFvec for the next level_half+1 to level_butterfly+2 levels,note that level level_half+1 is duplicated for all2all communication
**** multiply BF with BFvec
**** multiply BF with BFvec1
**** Step 2: all to all communication of the right multiplication results
**** Step 3: tensor matrix contraction
subroutine d_bplus_utilities::d_bf_md_block_extraction_multiply_oneblock_left | ( | type(d_matrixblock_md) | blocks, |
integer | bb_m, | ||
integer | Ndim, | ||
type(d_butterfly_vec) | BFvec, | ||
integer, dimension(ndim) | idx_c_m, | ||
integer | level, | ||
integer | dim_i, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats | ||
) |
subroutine d_bplus_utilities::d_bf_md_block_extraction_multiply_oneblock_right | ( | type(d_matrixblock_md) | blocks, |
integer | bb_m, | ||
integer | Ndim, | ||
type(d_butterfly_vec) | BFvec, | ||
integer, dimension(ndim) | idx_r_m, | ||
integer | level, | ||
integer | dim_i, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats | ||
) |
subroutine d_bplus_utilities::d_bf_md_block_mvp | ( | character | chara, |
real(kind=8), dimension(:, :) | xin, | ||
integer, dimension(ndim) | Ninloc, | ||
real(kind=8), dimension(:, :) | xout, | ||
integer, dimension(ndim) | Noutloc, | ||
integer | Nvec, | ||
type(d_matrixblock_md) | blocks, | ||
integer | Ndim, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats, | ||
type(d_mesh), dimension(ndim) | msh, | ||
type(d_hoption) | option | ||
) |
******* preallocate BFvec and BFvec1, number of blocks are exactly those in d_BF_block_MVP_dat, BFvec for the first 0:level_half+1 levels and BFvec for the next level_half+1 to level_butterfly+2 levels,note that level level_half+1 is duplicated for all2all communication
**** Step 1: multiply the factor matrices out from outtermost to middle level along each dimension
**** Step 2: all to all communication of the right multiplication results
**** Step 3: contraction with the middle level core tensors
**** Step 4: multiply the factor matrices out from middle level to the outtermost level along each dimension
subroutine d_bplus_utilities::d_bf_md_block_mvp_multiply_left | ( | type(d_matrixblock_md) | blocks, |
integer | bb_m, | ||
integer | Ndim, | ||
type(d_butterfly_vec) | BFvec, | ||
integer | Nvec, | ||
integer | level, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats | ||
) |
subroutine d_bplus_utilities::d_bf_md_block_mvp_multiply_right | ( | type(d_matrixblock_md) | blocks, |
integer | bb_m, | ||
integer | Ndim, | ||
type(d_butterfly_vec) | BFvec, | ||
integer | Nvec, | ||
integer | level, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats | ||
) |
subroutine d_bplus_utilities::d_bf_md_computememory | ( | integer | Ndim, |
type(d_matrixblock_md) | blocks, | ||
real(kind=8) | memory_dense, | ||
real(kind=8) | memory_comp | ||
) |
subroutine d_bplus_utilities::d_bf_md_delete | ( | integer | Ndim, |
type(d_matrixblock_md) | blocks, | ||
integer | allflag | ||
) |
subroutine d_bplus_utilities::d_bf_md_get_rank | ( | integer | Ndim, |
type(d_matrixblock_md) | blocks, | ||
type(d_proctree) | ptree | ||
) |
subroutine d_bplus_utilities::d_bf_movesingular_ker | ( | type(d_matrixblock) | blocks, |
character | chara, | ||
integer | level_start, | ||
integer | level_end, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats, | ||
real(kind=8) | tolerance | ||
) |
subroutine d_bplus_utilities::d_bf_movesingulartoleft | ( | type(d_matrixblock) | blocks | ) |
subroutine d_bplus_utilities::d_bf_movesingulartoright | ( | type(d_matrixblock) | blocks | ) |
subroutine d_bplus_utilities::d_bf_mult | ( | character | chara, |
real(kind=8), dimension(ninloc, ncol) | xin, | ||
real(kind=8), dimension(noutloc, ncol) | xout, | ||
integer | Ninloc, | ||
integer | Noutloc, | ||
integer | Ncol, | ||
type(d_matrixblock) | blocks, | ||
type(d_hoption) | option, | ||
type(d_hstat) | stats, | ||
type(d_proctree) | ptree | ||
) |
subroutine d_bplus_utilities::d_bf_partial_mvp_half | ( | type(d_matrixblock) | block_rand, |
character | chara, | ||
integer | level_start, | ||
integer | level_end, | ||
type(d_randomblock) | random, | ||
integer | num_vect_sub, | ||
integer | nth_s, | ||
integer | nth_e, | ||
integer | Ng | ||
) |
subroutine d_bplus_utilities::d_bf_print_size | ( | type(d_matrixblock) | block_i | ) |
subroutine d_bplus_utilities::d_bf_print_size_rank | ( | type(d_matrixblock) | block_i, |
real(kind=8) | tolerance | ||
) |
subroutine d_bplus_utilities::d_bf_redistribute_inplace | ( | type(d_matrixblock) | blocks, |
integer | pgno_new, | ||
type(d_hstat) | stats, | ||
type(d_proctree) | ptree, | ||
type(d_mesh) | msh | ||
) |
*** make sure every process has blocksButterflyKerl allocated
*** delete dummy blocksButterflyKerl if I don't share the output butterfly
integer function d_bplus_utilities::d_bf_switchlevel | ( | integer | level_butterfly, |
integer | pat_comp | ||
) |
subroutine d_bplus_utilities::d_bf_sym2asym | ( | type(d_matrixblock) | blocks | ) |
subroutine d_bplus_utilities::d_bf_value | ( | integer | mi, |
integer | nj, | ||
type(d_matrixblock) | blocks, | ||
real(kind=8) | value | ||
) |
subroutine d_bplus_utilities::d_bp_mult | ( | type(d_blockplus) | BP, |
character | chara, | ||
real(kind=8), dimension(ninloc, ncol) | xin, | ||
real(kind=8), dimension(noutloc, ncol) | xout, | ||
integer | Ninloc, | ||
integer | Noutloc, | ||
integer | Ncol, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats | ||
) |
subroutine d_bplus_utilities::d_bplus_block_mvp_dat | ( | type(d_blockplus) | bplus, |
character | chara, | ||
integer | M, | ||
integer | N, | ||
integer | Nrnd, | ||
real(kind=8), dimension(ldi, *) | random1, | ||
integer | ldi, | ||
real(kind=8), dimension(ldo, *) | random2, | ||
integer | ldo, | ||
real(kind=8) | a, | ||
real(kind=8) | b, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats, | ||
integer, optional | level_start, | ||
integer, optional | level_end | ||
) |
logical function d_bplus_utilities::d_bplus_checknan | ( | type(d_blockplus) | bplus_i | ) |
subroutine d_bplus_utilities::d_bplus_computememory | ( | type(d_blockplus) | bplus_i, |
real(kind=8) | memory, | ||
integer | rank | ||
) |
subroutine d_bplus_utilities::d_bplus_copy | ( | type(d_blockplus) | bplus_i, |
type(d_blockplus) | bplus_o, | ||
real(kind=8), optional | memory | ||
) |
subroutine d_bplus_utilities::d_bplus_copy_delete | ( | type(d_blockplus) | bplus_i, |
type(d_blockplus) | bplus_o, | ||
real(kind=8), optional | memory | ||
) |
subroutine d_bplus_utilities::d_bplus_delete | ( | type(d_blockplus) | bplus | ) |
subroutine d_bplus_utilities::d_bplus_extract_partial | ( | type(d_blockplus) | bplus_i, |
integer | ll_s, | ||
integer | row_group, | ||
type(d_blockplus) | agent_bplus, | ||
type(d_mesh) | msh | ||
) |
subroutine d_bplus_utilities::d_bplus_md_block_mvp_dat | ( | integer | Ndim, |
type(d_blockplus_md) | bplus, | ||
character | chara, | ||
integer, dimension(ndim) | M, | ||
integer, dimension(ndim) | N, | ||
integer | Nrnd, | ||
real(kind=8), dimension(product(ldi), *) | random1, | ||
integer, dimension(ndim) | ldi, | ||
real(kind=8), dimension(product(ldo), *) | random2, | ||
integer, dimension(ndim) | ldo, | ||
real(kind=8) | a, | ||
real(kind=8) | b, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats, | ||
type(d_mesh), dimension(ndim) | msh, | ||
type(d_hoption) | option, | ||
integer, optional | level_start, | ||
integer, optional | level_end | ||
) |
subroutine d_bplus_utilities::d_bplus_md_vec_1dto1d | ( | integer | Ndim, |
type(d_blockplus_md) | BP, | ||
integer | rowcol, | ||
integer | one2all, | ||
integer | level_s, | ||
integer | level_e, | ||
integer, dimension(ndim) | ld1, | ||
real(kind=8), dimension(product(ld1), *) | dat_1, | ||
integer | Nrnd, | ||
type(d_vectorsblock_onel), dimension(level_s:level_e) | vecs, | ||
type(d_proctree) | ptree, | ||
integer | nproc | ||
) |
***** redistribute the input and output vectors in d_Bplus_MD_block_MVP_dat between layout of bplusLL(1)matrices_block(1) to the layout of bplusLL(xx)matrices_block(yy)
subroutine d_bplus_utilities::d_bplus_redistribute_inplace | ( | type(d_blockplus) | bplus_o, |
type(d_hstat) | stats, | ||
type(d_proctree) | ptree, | ||
type(d_mesh) | msh | ||
) |
subroutine d_bplus_utilities::d_bplus_vec_1dto1d | ( | type(d_blockplus) | BP, |
integer | rowcol, | ||
integer | one2all, | ||
integer | level_s, | ||
integer | level_e, | ||
integer | ld1, | ||
real(kind=8), dimension(ld1, *) | dat_1, | ||
integer | Nrnd, | ||
type(d_vectorsblock_onel), dimension(level_s:level_e) | vecs, | ||
type(d_proctree) | ptree, | ||
integer | nproc | ||
) |
***** redistribute the input and output vectors in d_Bplus_block_MVP_dat between layout of bplusLL(1)matrices_block(1) to the layout of bplusLL(xx)matrices_block(yy)
subroutine d_bplus_utilities::d_computeparallelindices | ( | type(d_matrixblock) | block, |
integer | pgno, | ||
type(d_proctree) | ptree, | ||
type(d_mesh) | msh | ||
) |
subroutine d_bplus_utilities::d_computeparallelindices_md | ( | type(d_matrixblock_md) | block, |
integer | pgno, | ||
integer | Ndim, | ||
type(d_proctree) | ptree, | ||
type(d_mesh), dimension(ndim) | msh | ||
) |
subroutine d_bplus_utilities::d_computeparallelindicessub | ( | integer | base_group, |
integer | pgno, | ||
type(d_proctree) | ptree, | ||
type(d_mesh) | msh, | ||
integer, dimension(:, :) | MN_p | ||
) |
subroutine d_bplus_utilities::d_element_zmn_block_user | ( | integer | nrow, |
integer | ncol, | ||
integer, dimension(nrow) | mrange, | ||
integer, dimension(ncol) | nrange, | ||
real(kind=8), dimension(nrow, ncol) | values, | ||
type(d_mesh) | msh, | ||
type(d_hoption) | option, | ||
type(d_kernelquant) | ker, | ||
integer | myflag, | ||
integer | passflag, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats | ||
) |
***** Count number of active intersections Ninter
***** count number of local data
***** Broadcast mrange and nrange for each intersection
subroutine d_bplus_utilities::d_element_zmn_blocklist_user | ( | type(d_intersect), dimension(*) | submats, |
integer | Nsub, | ||
type(d_mesh) | msh, | ||
type(d_hoption) | option, | ||
type(d_kernelquant) | ker, | ||
integer | myflag, | ||
integer | passflag, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats, | ||
real(kind=8), dimension(:), optional, target | alldat_loc_in | ||
) |
***** Generate pmaps and pgidx for all intersections
***** count number of local data
***** Broadcast mrange and nrange for each intersection
***** Generate pmaps and pgidx for all intersections
***** count number of local data
subroutine d_bplus_utilities::d_element_zmn_tensorlist_user | ( | integer | Ndim, |
type(d_intersect_md), dimension(*) | subtensors, | ||
integer | Nsub, | ||
type(d_mesh), dimension(ndim) | msh, | ||
type(d_hoption) | option, | ||
type(d_kernelquant) | ker, | ||
integer | myflag, | ||
integer | passflag, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats, | ||
type(d_zfpquant), dimension(*), optional | zfpquants | ||
) |
integer function d_bplus_utilities::d_findgroup | ( | integer | idx, |
type(d_mesh) | msh, | ||
integer | level, | ||
integer | group | ||
) |
*** Find the group index of point idx at the (grouplevel+level) level
integer function d_bplus_utilities::d_findpggroup | ( | integer | idx, |
type(d_mesh) | msh, | ||
type(d_proctree) | ptree, | ||
integer | group, | ||
integer | pgno | ||
) |
*** Find the process group index of point idx in a group
subroutine d_bplus_utilities::d_full_block_extraction | ( | type(d_matrixblock) | blocks, |
type(d_intersect), dimension(:) | inters, | ||
type(d_proctree) | ptree, | ||
type(d_mesh) | msh, | ||
type(d_hstat) | stats, | ||
type(d_hoption) | option | ||
) |
subroutine d_bplus_utilities::d_full_block_md_mvp_dat | ( | type(d_matrixblock_md) | blocks, |
character | chara, | ||
integer | M, | ||
integer | num_vectors, | ||
real(kind=8), dimension(ldi, *) | random1, | ||
integer | ldi, | ||
real(kind=8), dimension(ldo, *) | random2, | ||
integer | ldo, | ||
real(kind=8) | a, | ||
real(kind=8) | b | ||
) |
**** Multiply with dense blocks (as tensor). This is the same as d_Full_block_MVP_dat, except that blocks needs to be type(d_matrixblock_MD)
subroutine d_bplus_utilities::d_full_block_mvp_dat | ( | type(d_matrixblock) | blocks, |
character | chara, | ||
integer | M, | ||
integer | num_vectors, | ||
real(kind=8), dimension(ldi, *) | random1, | ||
integer | ldi, | ||
real(kind=8), dimension(ldo, *) | random2, | ||
integer | ldo, | ||
real(kind=8) | a, | ||
real(kind=8) | b | ||
) |
**** Multiply with dense blocks.
recursive subroutine d_bplus_utilities::d_hmat_block_computememory | ( | type(d_matrixblock) | blocks, |
real*8 | memory | ||
) |
recursive subroutine d_bplus_utilities::d_hmat_block_copy | ( | character | trans, |
type(d_matrixblock), pointer | block2, | ||
type(d_matrixblock), pointer | block1, | ||
real(kind=8), optional | memory | ||
) |
recursive subroutine d_bplus_utilities::d_hmat_block_delete | ( | type(d_matrixblock) | blocks | ) |
recursive subroutine d_bplus_utilities::d_hmat_block_mvp_dat | ( | type(d_matrixblock) | blocks, |
character | trans, | ||
integer | idx_start_m, | ||
integer | idx_start_n, | ||
integer | Nrnd, | ||
real(kind=8), dimension(ldi, *) | Vin, | ||
integer | ldi, | ||
real(kind=8), dimension(ldo, *) | Vout, | ||
integer | ldo, | ||
real(kind=8) | a, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats, | ||
integer, optional | level_start, | ||
integer, optional | level_end | ||
) |
recursive subroutine d_bplus_utilities::d_hmat_lsolve | ( | type(d_matrixblock) | blocks_l, |
character | trans, | ||
integer | idx_start, | ||
integer | nvec, | ||
real(kind=8), dimension(ld, *) | Vinout, | ||
integer | ld, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats | ||
) |
subroutine d_bplus_utilities::d_hmat_parallelblock_mvp_dat | ( | type(d_matrixblock) | blocks_1, |
character | chara, | ||
integer | M, | ||
integer | N, | ||
integer | Nrnd, | ||
real(kind=8), dimension(ldi, *) | random1, | ||
integer | ldi, | ||
real(kind=8), dimension(ldo, *) | random2, | ||
integer | ldo, | ||
real(kind=8) | a, | ||
real(kind=8) | b, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats | ||
) |
recursive subroutine d_bplus_utilities::d_hmat_usolve | ( | type(d_matrixblock) | blocks_u, |
character | trans, | ||
integer | idx_start, | ||
integer | nvec, | ||
real(kind=8), dimension(ld, *) | Vinout, | ||
integer | ld, | ||
type(d_proctree) | ptree, | ||
type(d_hstat) | stats | ||
) |
subroutine d_bplus_utilities::d_lr_all2all_extraction | ( | type(d_matrixblock) | blocks, |
type(d_intersect), dimension(:) | inters, | ||
real(kind=8), dimension(rank, ncol) | Vpartial, | ||
integer | rank, | ||
integer | ncol, | ||
type(d_hstat) | stats, | ||
type(d_proctree) | ptree, | ||
type(d_mesh) | msh | ||
) |
*********** all to all communication of columns in the V factor from the 1D block column layout to that needed by the 1D block row layout
subroutine d_bplus_utilities::d_lr_block_extraction | ( | type(d_matrixblock) | blocks, |
type(d_intersect), dimension(:) | inters, | ||
type(d_proctree) | ptree, | ||
type(d_mesh) | msh, | ||
type(d_hstat) | stats | ||
) |
real(kind=8) function d_bplus_utilities::d_nod_score_ipair | ( | type(d_nod) | this | ) |
real(kind=8) function d_bplus_utilities::d_node_score_block_ptr_row | ( | type(d_nod) | this | ) |