Transposes a distribution but keeps the same mp_env
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(dbcsr_distribution_obj), | intent(out) | :: | dist_tr |
transposed distribution |
||
type(dbcsr_distribution_obj), | intent(in) | :: | dist_normal |
current distribution |
SUBROUTINE dbcsr_transpose_dims(dist_tr, dist_normal) !! Transposes a distribution but keeps the same mp_env TYPE(dbcsr_distribution_obj), INTENT(OUT) :: dist_tr !! transposed distribution TYPE(dbcsr_distribution_obj), INTENT(IN) :: dist_normal !! current distribution INTEGER :: ncols_tr, npcols_tr, nprows_tr, & nrows_tr, vgcd, vlcm INTEGER, DIMENSION(:), POINTER, CONTIGUOUS :: col_dist_data_tr, col_img_data_tr, & row_dist_data_tr, row_img_data_tr TYPE(dbcsr_mp_obj) :: mp_env ! --------------------------------------------------------------------------- mp_env = dbcsr_distribution_mp(dist_normal) ! ! transpose the rows/cols nrows_tr = dbcsr_distribution_ncols(dist_normal) ncols_tr = dbcsr_distribution_nrows(dist_normal) ! procs are not transposed nprows_tr = dbcsr_mp_nprows(mp_env) npcols_tr = dbcsr_mp_npcols(mp_env) vgcd = gcd(nprows_tr, npcols_tr) vlcm = lcm(nprows_tr, npcols_tr) ! ALLOCATE (row_dist_data_tr(nrows_tr)) ALLOCATE (row_img_data_tr(nrows_tr)) CALL rebin_distribution(row_dist_data_tr, row_img_data_tr, & dbcsr_distribution_col_dist(dist_normal), & nprows_tr, & nprows_tr/vgcd, vlcm/nprows_tr) ! ! discard image distribution, it will be build later in the multiplication DEALLOCATE (row_img_data_tr) NULLIFY (row_img_data_tr) ! ALLOCATE (col_dist_data_tr(ncols_tr)) ALLOCATE (col_img_data_tr(ncols_tr)) CALL rebin_distribution(col_dist_data_tr, col_img_data_tr, & dbcsr_distribution_row_dist(dist_normal), & npcols_tr, & npcols_tr/vgcd, vlcm/npcols_tr) ! ! discard image distribution, it will be build later in the multiplication DEALLOCATE (col_img_data_tr) NULLIFY (col_img_data_tr) ! CALL dbcsr_distribution_new(dist_tr, mp_env, & row_dist_data_tr, col_dist_data_tr, & reuse_arrays=.TRUE.) END SUBROUTINE dbcsr_transpose_dims