Elementos de acesso da matriz retornada em Fortran

Como alguém acessa um elemento de uma matriz que é retornada de uma função? Por exemplo,shape() retorna uma matriz de inteiros. Como se compara um elemento dessa matriz com um inteiro? O seguinte não compila:

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

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

O erro é:

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

Eu entendo que isso é porqueshape(c) retorna uma matriz. No entanto, acessar um elemento da matriz não parece ser possível assim:shape(c)(1)

Agora, se eu adicionar essas duas linhas:

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

... e mudar oif cláusula para isso:

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

... então funciona. Mas eu realmente tenho que declarar uma variável de matriz extra para manter o valor de retorno deshape(), ou existe alguma outra maneira de fazer isso?

questionAnswers(4)

yourAnswerToTheQuestion