PURE FUNCTION dbcsr_distribution_processor(dist, row, col) &
RESULT(processor)
TYPE(dbcsr_distribution_obj), INTENT(IN) :: dist
INTEGER, INTENT(IN) :: row, col
INTEGER :: processor
INTEGER :: c, r
IF (ASSOCIATED(dist%d%row_map%low)) THEN ! instead of array_exists
r = dist%d%row_map%low%data(row)
ELSE
r = row
END IF
IF (ASSOCIATED(dist%d%col_map%low)) THEN ! instead of array_exists
c = dist%d%col_map%low%data(col)
ELSE
c = col
END IF
processor = dist%d%mp_env%mp%pgrid(dist%d%row_dist_block%low%data(r), &
dist%d%col_dist_block%low%data(c))
END FUNCTION dbcsr_distribution_processor