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