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 'Star maps using Blender'
Blender just recently dropped a new version, 4.5(with 5.0 on the horizon), and within it was a new feature for which I immediately thought of a use for. The new feature was a .csv importer for Geometry nodes. Geometry nodes are a method of modelling that uses a node tree to create 3D models which offers more flexibility than straight modeling does. The .csv importer node allows you to bring in a .csv file and use the data in it to control aspects of your model. So for example, if you...
I tried a web search "the loss of programming ", and found an article saying that all aspects of writing, developing, and testing software programs will one day all be handled through artificial intelligence. One must wonder then, who is responsible. WHO is responsible for any problems, bugs, deficiencies, or whatever malfunctions which the programs make their users endure? Things may work wrong however the "wrong" happens. AI needs to fix the problems for the users. Any way to...

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