Create a default nd process topology that is consistent with a given 2d topology. Purpose: a nd tensor defined on the returned process grid can be represented as a DBCSR matrix with the given 2d topology. This is needed to enable contraction of 2 tensors (must have the same 2d process grid). \return with nd cartesian grid
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(mp_comm_type), | intent(in) | :: | comm_2d |
communicator with 2-dimensional topology |
||
integer, | intent(in), | DIMENSION(:) | :: | map1_2d |
which nd-indices map to first matrix index and in which order which nd-indices map to second matrix index and in which order |
|
integer, | intent(in), | DIMENSION(:) | :: | map2_2d |
which nd-indices map to first matrix index and in which order which nd-indices map to second matrix index and in which order |
|
integer, | intent(in), | optional, | DIMENSION(SIZE(map1_2d) + SIZE(map2_2d)) | :: | dims_nd |
nd dimensions |
integer, | intent(in), | optional, | DIMENSION(SIZE(map1_2d)) | :: | dims1_nd | |
integer, | intent(in), | optional, | DIMENSION(SIZE(map2_2d)) | :: | dims2_nd | |
integer, | intent(in), | optional, | DIMENSION(2) | :: | pdims_2d |
if comm_2d does not have a cartesian topology associated, can input dimensions with pdims_2d |
integer, | intent(in), | optional, | DIMENSION(SIZE(map1_2d) + SIZE(map2_2d)) | :: | tdims |
tensor block dimensions. If present, process grid dimensions are created such that good load balancing is ensured even if some of the tensor dimensions are small (i.e. on the same order or smaller than nproc**(1/ndim) where ndim is the tensor rank) |
integer, | intent(in), | optional | :: | nsplit | ||
integer, | intent(in), | optional | :: | dimsplit |