dbcsr_repoint_index Subroutine

public subroutine dbcsr_repoint_index(m, slot)

Updates the index pointers of a bcsr matrix

Arguments

TypeIntentOptionalAttributesName
type(dbcsr_type), intent(inout) :: m

matrix for which index pointers are updated

integer, intent(in), optional :: slot

only repoint this index


Contents

Source Code


Source Code

   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