get_data_d Subroutine

private subroutine get_data_d(area, DATA, lb, ub)

Returns the single/double precision real/complex data

Arguments

Type IntentOptional Attributes Name
type(dbcsr_data_obj), intent(in) :: area

data area

real(kind=real_8), DIMENSION(:), POINTER :: DATA

pointer to data

integer, intent(in), optional :: lb

lower bound for pointer upper bound for pointer

integer, intent(in), optional :: ub

lower bound for pointer upper bound for pointer


Source Code

      SUBROUTINE get_data_d (area, DATA, lb, ub)
     !! Returns the single/double precision real/complex data

         TYPE(dbcsr_data_obj), INTENT(IN)  :: area
        !! data area
         REAL(kind=real_8), DIMENSION(:), POINTER    :: DATA
        !! pointer to data
         INTEGER, INTENT(IN), OPTIONAL     :: lb, ub
        !! lower bound for pointer
        !! upper bound for pointer

         INTEGER                        :: l, u
!   ---------------------------------------------------------------------------

         IF (ASSOCIATED(area%d)) THEN
            IF (area%d%data_type /= dbcsr_type_real_8) &
               DBCSR_ABORT("get_data_d: data-area has wrong type")
            IF (PRESENT(lb) .OR. PRESENT(ub)) THEN
               l = LBOUND(area%d%r_dp, 1)
               IF (PRESENT(lb)) l = lb
               u = UBOUND(area%d%r_dp, 1)
               IF (PRESENT(ub)) u = ub
               IF (debug_mod) THEN
                  IF (l < LBOUND(area%d%r_dp, 1)) &
                     DBCSR_ABORT("Out of bounds")
                  IF (u > UBOUND(area%d%r_dp, 1)) &
                     DBCSR_ABORT("Out of bounds")
               END IF
               DATA => area%d%r_dp (l:u)
            ELSE
               DATA => area%d%r_dp
            END IF
         ELSE
            NULLIFY (DATA)
         END IF
      END SUBROUTINE get_data_d