SUBROUTINE EIGX(MAT, W, N) INTEGER N DOUBLE PRECISION MAT(*), W(*) CHARACTER JOBZ, UPLO INTEGER INFO, LDZ, I DOUBLE PRECISION Z(N,N), WORK(3*N) JOBZ = 'N' UPLO = 'L' LDZ = N 13 FORMAT(F9.3) CALL DSPEV (JOBZ, UPLO, N, MAT, W, Z, LDZ, WORK, INFO ) IF (INFO.EQ.0) RETURN WRITE(6,11) INFO 11 FORMAT('INFO:',I6) END SUBROUTINE EIGXV(MAT, W, Z, N) INTEGER N DOUBLE PRECISION MAT(*), W(*) , Z(N, N) CHARACTER JOBZ, UPLO INTEGER INFO, LDZ, I DOUBLE PRECISION WORK(3*N) JOBZ = 'V' UPLO = 'L' LDZ = N 13 FORMAT(F9.3) CALL DSPEV (JOBZ, UPLO, N, MAT, W, Z, LDZ, WORK, INFO ) IF (INFO.EQ.0) RETURN WRITE(6,11) INFO 11 FORMAT('INFO:',I6) END SUBROUTINE HELLO WRITE(6,101) 101 FORMAT('hello world from fortran') END SUBROUTINE INVERSE(MAT,N) IMPLICIT NONE DOUBLE PRECISION MAT(*) INTEGER N DOUBLE PRECISION WORK(N*N) INTEGER IPIV(N), LWORK, INFO LWORK = N*N CALL DGETRF( N, N, MAT, N, IPIV, INFO) IF ( INFO .LT. 0 ) THEN WRITE(6,41) -INFO ELSE IF ( INFO .GT. 0 ) THEN WRITE(6,51) INFO ENDIF CALL DGETRI(N, MAT, N, IPIV, WORK, LWORK, INFO) IF ( INFO .LT. 0 ) THEN WRITE(6,41) -INFO ELSE IF ( INFO .GT. 0 ) THEN WRITE(6,51) INFO ENDIF RETURN 41 FORMAT('error (INVERSE): illegal argument ', i2) 51 FORMAT('error (INVERSE): singular matrix', i2) END SUBROUTINE PDINVERSE(MAT,N) IMPLICIT NONE DOUBLE PRECISION MAT(*) INTEGER N DOUBLE PRECISION R(N,N) INTEGER I, J, INFO DO I = 1,N DO J = I,N R(I,J) = MAT(I*N+J) ENDDO ENDDO CALL DPOTRF('U', N, R, N, INFO) CALL DPOTRI('U', N, R, N, INFO) IF ( INFO .LT. 0 ) THEN WRITE(6,41) -INFO ELSE IF ( INFO .GT. 0 ) THEN WRITE(6,51) INFO ENDIF DO I = 1,N DO J = I,N MAT(I*N+J) = R(I,J) MAT(J*N+I) = MAT(I*N+J) ENDDO ENDDO RETURN 41 FORMAT('error (PDINVERSE): illegal argument ', i2) 51 FORMAT('error (PDINVERSE): singular matrix', i2) END