Comment dois-je appeler une fonction Fortran?
Question
Comment dois-je appeler une fonction Fortran?
J'essaie d'appeler DLANSY mais il retourne par erreur 0. Voir le code et la sortie du programme ci-dessous.
SUBROUTINE COND(TYP,N,A,LDA,IPIV,WORK,LWORK,IWORK,INFO,RCOND)
INTEGER TYP, N, LDA, IPIV(*), IWORK(*), INFO, LWORK
DOUBLE PRECISION A(LDA,*), ANORM, RCOND, WORK(*)
CHARACTER*1 UPLO
EXTERNAL DLANSY, DSYTRF, DSYCON
IF (TYP .EQ. 0) THEN
UPLO = 'L'
ELSE
UPLO = 'U'
ENDIF
DO I = 1, N
DO J = 1,N
WRITE(*,*) I,J,A(I,J)
END DO
END DO
WRITE(*,*) 'TYPE ',UPLO
WRITE(*,*) 'N ',N
WRITE(*,*) 'LDA ',LDA
ANORM = DLANSY('1', UPLO, N, A, LDA, WORK)
C ANORM = 10;
WRITE(*,*) 'ANORM ',ANORM
END
Et ce qu'il imprime:
1 1 1.0000000000000000
1 2 2.0000000000000000
1 3 3.0000000000000000
1 4 4.0000000000000000
2 1 1.0000000000000000
2 2 2.0000000000000000
2 3 3.0000000000000000
2 4 4.0000000000000000
3 1 1.0000000000000000
3 2 2.0000000000000000
3 3 3.0000000000000000
3 4 4.0000000000000000
4 1 1.0000000000000000
4 2 2.0000000000000000
4 3 3.0000000000000000
4 4 4.0000000000000000
TYPE L
N 4
LDA 4
ANORM 0.0000000000000000
Dans les tableaux d'entrée sont de la bonne taille.
Qu'est-ce qui se passe?
La solution
Vous devez dire au compilateur que DLANSY retourne une valeur double de précision, plutôt que réel, ce qui est ce que vous obtenez actuellement par les règles de frappe implicites. Par exemple. avec une ligne comme
double precision, external :: dlansy
Ou, si, pour une étrange raison, on se limite à un compilateur ancien qui ne supporte pas F90:
DOUBLE PRECISION DLANSY
EXTERNAL DLANSY
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow