Helper routine
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(acc_stream_type), | DIMENSION(:), POINTER | :: | streams | |||
character(len=*), | intent(in) | :: | basename | |||
integer, | intent(in) | :: | n | |||
type(acc_event_type), | optional, | DIMENSION(:), POINTER | :: | events | ||
integer, | intent(in), | optional | :: | priority |
SUBROUTINE stream_array_force_size(streams, basename, n, events, priority)
!! Helper routine
TYPE(acc_stream_type), DIMENSION(:), POINTER :: streams
CHARACTER(len=*), INTENT(IN) :: basename
INTEGER, INTENT(IN) :: n
TYPE(acc_event_type), DIMENSION(:), OPTIONAL, &
POINTER :: events
INTEGER, INTENT(IN), OPTIONAL :: priority
CHARACTER(len=default_string_length) :: name
INTEGER :: i
IF (ASSOCIATED(streams)) THEN
IF (SIZE(streams) /= n) THEN
DO i = 1, SIZE(streams)
CALL acc_stream_destroy(streams(i))
IF (PRESENT(events)) CALL acc_event_destroy(events(i))
END DO
DEALLOCATE (streams)
IF (PRESENT(events)) DEALLOCATE (events)
END IF
END IF
IF (.NOT. ASSOCIATED(streams) .AND. n > 0) THEN
ALLOCATE (streams(n))
IF (PRESENT(events)) ALLOCATE (events(n))
DO i = 1, SIZE(streams)
WRITE (name, "(A,I3)") TRIM(basename), i
CALL acc_stream_create(streams(i), name=TRIM(name), priority=priority)
IF (PRESENT(events)) CALL acc_event_create(events(i))
END DO
END IF
END SUBROUTINE stream_array_force_size