Returns the allocated data size
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(dbcsr_data_obj), | intent(in) | :: | area |
data area to query for size |
||
integer, | intent(out), | DIMENSION(:) | :: | sizes |
array with the data sizes |
|
logical, | intent(out) | :: | valid |
whether the data is actually allocated |
SUBROUTINE dbcsr_data_get_sizes_any(area, sizes, valid)
!! Returns the allocated data size
TYPE(dbcsr_data_obj), INTENT(IN) :: area
!! data area to query for size
INTEGER, DIMENSION(:), INTENT(OUT) :: sizes
!! array with the data sizes
LOGICAL, INTENT(OUT) :: valid
!! whether the data is actually allocated
CHARACTER(len=*), PARAMETER :: routineN = 'dbcsr_data_get_sizes_any'
INTEGER :: handle
! ---------------------------------------------------------------------------
IF (careful_mod) &
CALL timeset(routineN, handle)
valid = .FALSE.
sizes(:) = 0
IF (ASSOCIATED(area%d)) THEN
IF (careful_mod) THEN
IF (dbcsr_type_is_2d(area%d%data_type)) THEN
IF (SIZE(sizes) /= 2) &
DBCSR_ABORT("Sizes must have 2 elements for 2-D data")
ELSE
IF (SIZE(sizes) /= 1) &
DBCSR_ABORT("Sizes must have 1 elements for 1-D data")
END IF
END IF
valid = dbcsr_data_exists(area)
IF (valid) THEN
SELECT CASE (area%d%data_type)
CASE (dbcsr_type_real_8)
sizes(1) = SIZE(area%d%r_dp)
CASE (dbcsr_type_real_4)
sizes(1) = SIZE(area%d%r_sp)
CASE (dbcsr_type_complex_8)
sizes(1) = SIZE(area%d%c_dp)
CASE (dbcsr_type_complex_4)
sizes(1) = SIZE(area%d%c_sp)
CASE (dbcsr_type_real_8_2d)
sizes(1) = SIZE(area%d%r2_dp, 1)
sizes(2) = SIZE(area%d%r2_dp, 2)
CASE (dbcsr_type_real_4_2d)
sizes(1) = SIZE(area%d%r2_sp, 1)
sizes(2) = SIZE(area%d%r2_sp, 2)
CASE (dbcsr_type_complex_8_2d)
sizes(1) = SIZE(area%d%c2_dp, 1)
sizes(2) = SIZE(area%d%c2_dp, 2)
CASE (dbcsr_type_complex_4_2d)
sizes(1) = SIZE(area%d%c2_sp, 1)
sizes(2) = SIZE(area%d%c2_sp, 2)
CASE default
DBCSR_ABORT("Incorrect data type")
END SELECT
END IF
END IF
IF (careful_mod) &
CALL timestop(handle)
END SUBROUTINE dbcsr_data_get_sizes_any