## public function dbcsr_t_nd_mp_comm(comm_2d, map1_2d, map2_2d, dims_nd, dims1_nd, dims2_nd, pdims_2d, tdims, nsplit, dimsplit)

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

### Arguments

Type | Intent | Optional | Attributes | | Name | |

integer, |
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** | |