Accede a los elementos de la matriz devuelta en Fortran

¿Cómo se accede a un elemento de una matriz que se devuelve desde una función? Por ejemplo,shape() devuelve una matriz de enteros. ¿Cómo se compara un elemento de esa matriz con un entero? Lo siguiente no se compila:

integer :: a
integer, dimension(5) :: b

a = 5
if (a .eq. shape(b)) then
    print *, 'equal'
end if

El error es:

if (a .eq. shape(c)) then
    1
Error: IF clause at (1) requires a scalar LOGICAL expression

Entiendo que esto es porqueshape(c) devuelve una matriz. Sin embargo, el acceso a un elemento de la matriz no parece ser posible así:shape(c)(1)

Ahora si agrego estas dos líneas:

integer, dimension(1) :: c
c = shape(b)

... y cambiar elif cláusula a esto:

if (a .eq. c(1)) then

... entonces funciona. Pero, ¿realmente tengo que declarar una variable de matriz adicional para mantener el valor de retorno deshape(), o hay alguna otra manera de hacerlo?

Respuestas a la pregunta(4)

Su respuesta a la pregunta