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 | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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 |
pointer to data
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