Re-indexes row_p and blk_i according to columns.
The re-indexing is equivalent to a local-only transpose.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(out), | DIMENSION(:) | :: | new_col_p |
new column pointer new row index |
|
integer, | intent(out), | DIMENSION(:) | :: | new_row_i |
new column pointer new row index |
|
integer, | intent(in), | DIMENSION(:) | :: | old_row_p |
old row pointer old column index |
|
integer, | intent(in), | DIMENSION(:) | :: | old_col_i |
old row pointer old column index |
|
integer, | intent(out), | optional, | DIMENSION(:) | :: | new_blk_p |
new block pointer |
integer, | intent(in), | optional, | DIMENSION(:) | :: | old_blk_p |
old block pointer |
SUBROUTINE transpose_index_local(new_col_p, new_row_i, old_row_p, & old_col_i, new_blk_p, old_blk_p) !! Re-indexes row_p and blk_i according to columns. !! !! The re-indexing is equivalent to a local-only transpose. INTEGER, DIMENSION(:), INTENT(OUT) :: new_col_p, new_row_i !! new column pointer !! new row index INTEGER, DIMENSION(:), INTENT(IN) :: old_row_p, old_col_i !! old row pointer !! old column index INTEGER, DIMENSION(:), INTENT(OUT), OPTIONAL :: new_blk_p !! new block pointer INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: old_blk_p !! old block pointer CHARACTER(len=*), PARAMETER :: routineN = 'transpose_index_local' INTEGER :: error_handle, nblks, ncols_new, nrows_old INTEGER, ALLOCATABLE, DIMENSION(:) :: new_col_i LOGICAL :: blks ! --------------------------------------------------------------------------- CALL timeset(routineN, error_handle) blks = PRESENT(new_blk_p) .AND. PRESENT(old_blk_p) nblks = SIZE(old_col_i) nrows_old = SIZE(old_row_p) - 1 ncols_new = SIZE(new_col_p) - 1 IF (blks) new_blk_p(:) = old_blk_p(:) ALLOCATE (new_col_i(nblks)) CALL dbcsr_expand_row_index(old_row_p, new_row_i, nrows_old, nblks) new_col_i(:) = old_col_i(:) CALL dbcsr_sort_indices(nblks, new_col_i, new_row_i, new_blk_p) CALL dbcsr_make_dbcsr_index(new_col_p, new_col_i, ncols_new, nblks) DEALLOCATE (new_col_i) CALL timestop(error_handle) END SUBROUTINE transpose_index_local