Argumento complexo real para real de Gfortran
Estou tentando usar o fftpack com o gfortran, mas estou recebendo erros que considero relacionados a que algumas rotinas passam por matrizes complexas quando o argumento fictício é declarado como real.
Li um comentário em uma página da Intel fortran que poderia ser desativado "verificar interface de rotina". Alguém sabe se existe uma opção semelhante para o gfortran?
Gostaria de não precisar editar o fftpack ... (acho que isso ocorre porque o complexo na memória é representado por dois reais e os argumentos do array são passados como referências, mas, por favor, corrija-me se estiver errado :))
[para elaborar e atender aos comentários ...] Então, depois de baixar o dfftpack do netlib e compilar como um arquivo independente (f77 eu pressiono) com todas as sub-rotinas no mesmo arquivo, recebo um aviso, por exemplo, em
SUBROUTINE DFFTF (N,R,WSAVE)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
DIMENSION R(1) ,WSAVE(1)
IF (N .EQ. 1) RETURN
CALL RFFTF1 (N,R,WSAVE,WSAVE(N+1),WSAVE(2*N+1))
RETURN
END
o aviso aparece ao chamarCALL RFFTF1 (N,R,WSAVE,WSAVE(N+1),WSAVE(2*N+1))
. O início do RFFTF1 fica assim ...
SUBROUTINE RFFTF1 (N,C,CH,WA,IFAC)
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
DIMENSION CH(*) ,C(*) ,WA(*) ,IFAC(*)
e o aviso da compilação atinge o argumento realWSAVE(2*N+1)
- para o argumento fictícioIFAC
: (saída da janela code :: blocks build log)
mingw32-gfortran.exe -Jobj\Debug\ -Wall -g -c
C:\... \dfftpack.f -o obj\Debug\dfftpack.o
C:\... \dfftpack.f:345.40:
CALL RFFTB1 (N,R,WSAVE,WSAVE(N+1),WSAVE(2*N+1))
1 Warning: Type mismatch in argument
'ifac' at (1); passed REAL(8) to INTEGER(4)
Suponho que isso causará um resultado incorreto .. (a passagem de um real para inteiro parece não converter / arredondar para o número inteiro mais próximo, mas para outra coisa. Alguém sabe se deve ser arredondado na chamada, como:NINT(WSAVE(2*N+1))
?