dbcsr_get_data_c_c Function

private function dbcsr_get_data_c_c(area, select_data_type, lb, ub) result(DATA)

Returns the single/double precision real/complex data

Calling This routine is hidden behind the dbcsr_get_data interface, hence the need for the select_data_type argument. see dbcsr_get_data_p_c

Arguments

TypeIntentOptionalAttributesName
type(dbcsr_data_obj), intent(in) :: area

data area

complex(kind=real_4), intent(in) :: select_data_type

force datatype

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

Return Value complex(kind=real_4),DIMENSION(:),POINTER

pointer to data


Contents

Source Code


Source Code

      FUNCTION dbcsr_get_data_c_c (area, select_data_type, lb, ub) RESULT(DATA)
     !! Returns the single/double precision real/complex data
     !!
     !! Calling
     !! This routine is hidden behind the dbcsr_get_data interface, hence the
     !! need for the select_data_type argument.
     !! see dbcsr_get_data_p_c

         TYPE(dbcsr_data_obj), INTENT(IN)         :: area
        !! data area
         COMPLEX(kind=real_4), INTENT(IN)            :: select_data_type
        !! force datatype
         INTEGER, INTENT(IN), OPTIONAL  :: lb, ub
        !! lower bound for pointer
        !! upper bound for pointer
         COMPLEX(kind=real_4), DIMENSION(:), POINTER :: DATA
        !! pointer to data

         INTEGER                        :: l, u

!   ---------------------------------------------------------------------------

         ! The select_data_type argument is needed to make this function unique
         ! enough to use in the interface.
         IF (KIND(select_data_type) .NE. KIND(DATA)) &
            DBCSR_ABORT("compiler borken")

         IF (ASSOCIATED(area%d)) THEN
            IF (area%d%data_type /= dbcsr_type_complex_4) &
               DBCSR_ABORT("dbcsr_get_data_c_c: data-area has wrong type")
            IF (PRESENT(lb) .OR. PRESENT(ub)) THEN
               l = LBOUND(area%d%c_sp, 1)
               IF (PRESENT(lb)) l = lb
               u = UBOUND(area%d%c_sp, 1)
               IF (PRESENT(ub)) u = ub
               IF (debug_mod) THEN
                  IF (l .LT. LBOUND(area%d%c_sp, 1)) &
                     DBCSR_ABORT("Out of bounds")
                  IF (u .GT. UBOUND(area%d%c_sp, 1)) &
                     DBCSR_ABORT("Out of bounds")
               END IF
               DATA => area%d%c_sp (l:u)
            ELSE
               DATA => area%d%c_sp
            END IF
         ELSE
            NULLIFY (DATA)
         END IF
      END FUNCTION dbcsr_get_data_c_c