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?