Updates the index pointers of a bcsr matrix
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(dbcsr_type), | intent(inout) | :: | m |
matrix for which index pointers are updated |
||
integer, | intent(in), | optional | :: | slot |
only repoint this index |
SUBROUTINE dbcsr_repoint_index(m, slot) !! Updates the index pointers of a bcsr matrix TYPE(dbcsr_type), INTENT(INOUT) :: m !! matrix for which index pointers are updated INTEGER, INTENT(IN), OPTIONAL :: slot !! only repoint this index INTEGER :: s LOGICAL :: all ! --------------------------------------------------------------------------- IF (m%nblks .NE. m%index(dbcsr_slot_nblks)) THEN m%nblks = m%index(dbcsr_slot_nblks) m%nze = m%index(dbcsr_slot_nze) END IF all = .TRUE. IF (PRESENT(slot)) THEN all = .FALSE. s = slot ELSE s = 0 END IF IF (m%index(dbcsr_slot_row_p) .GT. 0 .AND. all .OR. & s .EQ. dbcsr_slot_row_p) THEN IF (m%index(dbcsr_slot_row_p) .GT. 0) THEN m%row_p => m%index(m%index(dbcsr_slot_row_p): & m%index(dbcsr_slot_row_p + 1)) ELSE NULLIFY (m%row_p) END IF END IF IF (m%index(dbcsr_slot_col_i) .GT. 0 .AND. all .OR. & s .EQ. dbcsr_slot_col_i) THEN IF (m%index(dbcsr_slot_col_i) .GT. 0) THEN m%col_i => m%index(m%index(dbcsr_slot_col_i): & m%index(dbcsr_slot_col_i + 1)) ELSE NULLIFY (m%col_i) END IF END IF IF (m%index(dbcsr_slot_blk_p) .GT. 0 .AND. all .OR. & s .EQ. dbcsr_slot_blk_p) THEN IF (m%index(dbcsr_slot_blk_p) .GT. 0) THEN m%blk_p => m%index(m%index(dbcsr_slot_blk_p): & m%index(dbcsr_slot_blk_p + 1)) ELSE NULLIFY (m%blk_p) END IF END IF IF (m%index(dbcsr_slot_thr_c) .GT. 0 .AND. all .OR. & s .EQ. dbcsr_slot_thr_c) THEN IF (m%index(dbcsr_slot_thr_c) .GT. 0) THEN m%thr_c => m%index(m%index(dbcsr_slot_thr_c): & m%index(dbcsr_slot_thr_c + 1)) ELSE NULLIFY (m%thr_c) END IF END IF IF (m%index(dbcsr_slot_coo_l) .GT. 0 .AND. all .OR. & s .EQ. dbcsr_slot_coo_l) THEN IF (m%index(dbcsr_slot_coo_l) .GT. 0) THEN m%coo_l => m%index(m%index(dbcsr_slot_coo_l): & m%index(dbcsr_slot_coo_l + 1)) ELSE NULLIFY (m%coo_l) END IF END IF IF (all) THEN m%index(dbcsr_slot_nblks) = m%nblks m%index(dbcsr_slot_nze) = m%nze END IF END SUBROUTINE dbcsr_repoint_index