Fortran [Fortran] Problems with LAPACK routine

  • Thread starter Thread starter Bashkir
  • Start date Start date
  • Tags Tags
    Fortran Lapack
AI Thread Summary
The discussion revolves around using the LAPACK routine dsyev to compute the eigenvalues of a matrix in Fortran. The user encounters a compilation error indicating an "undefined reference" to the dsyev subroutine. The solution involves linking the LAPACK library during compilation, which requires specifying the correct library path and name using the -L and -l switches. After addressing the linking issue, a new error arises: a memory fault (coredump). This is attributed to an incorrect call to dsyev, which should include nine parameters instead of eight. The correct call requires the matrix A as the fourth argument, and the order of parameters must be adjusted. Additionally, the LWORK variable needs proper initialization, and the WORK array must be larger than six elements for a 6x6 matrix. These adjustments are crucial for successful execution of the program.
Bashkir
Messages
31
Reaction score
1
I am trying to use the LAPACK routine dsyev to solve for the eigenvalues of a matrix, and I designed a program to test this and make sure I am getting the right results. It isn't recognizing the subroutine however.

The subroutine is dsyev, which I can post or can be found on the LAPACK site.

My program is

PROGRAM EIGENVALUE

IMPLICIT NONE

! Statements
Double Precision :: A (6,6), w (6), Work (6)
INTEGER :: i, INFO, LWORK, LDA = 6
CHARACTER :: N, U

! External Subroutines
EXTERNAL :: dsyev

! A matrix
A (1, : ) = (/ 0, 1, 0, 0, 0, 0 /)
A (2, : ) = (/ 0, 0, 1, 0, 0, 0 /)
A (3, : ) = (/ 1, 0, 0, 0, 0, 0 /)
A (4, : ) = (/ 0, 0, 0, 0, 0, 1 /)
A (5, : ) = (/ 0, 0, 0, 1, 0, 0 /)
A (6, : ) = (/ 0, 0, 0, 0, 1, 0 /)

CALL dsyev( 'N', 'U', 6, W, LDA, WORK, LWORK, INFO )

! Print the solution
DO i = 1, 6
WRITE (*, 9) i, w (i)
END DO

9 format ('x [' i1 '] =', f5.2)
END PROGRAM EIGENVALUE


And when I try to compile the error I am getting is:

collins@piccard $ gfortran Eigenvalue.f90
/tmp/ccczm4lt.o: In function `MAIN__':
Eigenvalue.f90:(.text+0x1b9): undefined reference to `dsyev_'
collect2: ld returned 1 exit status
 
Technology news on Phys.org
You need to link the library that contains dsyev to your program when you compile it, using a command line similar to the following. The quoted text comes from http://www.stanford.edu/class/me200c/tutorial_90/03_unix90.html. In your case the text after the -L switch is the path to the library directory, and after the -l switch is the name of the library file.
It's been some time since I've written any Fortran code, so what I'm saying I believe is correct.
Similarly, we can link to a Fortran 90 compiled library (such as the BLAS/LAPACK library in the class account) by
f90 main.f90 -L/usr/class/me390/lib -lmy_lib90
 
That got it to compile, but now I am getting this error.

Memory fault(coredump)
 
Based on this documentation - http://www.netlib.org/lapack/explore-html/dd/d4c/dsyev_8f_source.html - you didn't call dsyev correctly. There should be 9 parameters in the call - you have 8.

Code:
CALL dsyev( 'N', 'U', 6, W, LDA, WORK, LWORK, INFO )
Per the documentation, it should be like this:

CALL dsyev( 'N', 'U', 6, A, LDA, W, WORK, LWORK, INFO )

In your call, you're missing the A array, and you have LDA and W in the wrong order. Also, your LWORK variable isn't initialized.
 
Also, the documentation says the WORK array must be longer than 6 elements for a 6x6 matrix.
 
Thread 'Is this public key encryption?'
I've tried to intuit public key encryption but never quite managed. But this seems to wrap it up in a bow. This seems to be a very elegant way of transmitting a message publicly that only the sender and receiver can decipher. Is this how PKE works? No, it cant be. In the above case, the requester knows the target's "secret" key - because they have his ID, and therefore knows his birthdate.

Similar threads

Replies
1
Views
8K
Replies
4
Views
2K
Replies
5
Views
1K
Replies
2
Views
3K
Replies
6
Views
2K
Replies
18
Views
6K
Replies
22
Views
5K
Replies
2
Views
2K
Replies
7
Views
4K
Back
Top