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?

Était-ce utile?

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
scroll top