- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

The call is:

use lapack95

REAL(8) R(MD,MD),E(MD),V(MD,MD),E1(MD),V1(MD,MD)

REAL(8) AP(MD*MD)

E1=0.

V1=0.

K=1

DO J=1,MD

DO I=J,MD

AP(K)=R(I,J)

K=K+1

END DO

END DO

CALL spevd(AP,E1,'L',V1,INFO)

where md is 21.

The documentaed call is:

Fortran 95:

call spevd(ap, w [,uplo] [,z] [,info])

and additionally states later:

Specific details for the routine spevd interface are the following:

ap Holds the array A of size (n*(n+1)/2).

w Holds the vector with the number of elements n.

z Holds the matrix Z of size (n, n).

uplo Must be 'U' or 'L'. The default value is 'U'.

jobz Restored based on the presence of the argument z as follows:

jobz = 'V', if z is present,

jobz = 'N', if z is omitted.

Link Copied

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

If you provide a complete, self-contained example that exhibits the problem, I can look at it. On the other hand, code fragments with unknown argument values are not enough to get started with probing for causes of aborts.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

OK, in building a complete example, I discoved that the AP argument must be passed with the exact dimension, i.e. AP(md*(md+1)/2) in my case. This is understandable, and I should have realized it sooner.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

*>must be passed with the exact dimension*

*n,*the number of rows (or columns) of the matrix, the value of

*n*has to be deduced from the size of the packed array by solving a quadratic equation for

*n*, (

*n (n + 1) /2*= length of array

*Ap*) as we can see in the source files sspevd.f90and dspevd.f90.

*The dimension of*

`ap`must be at least max(1,`n`*(`n`+1)/2)

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hi,

The info argument returns the number of argument of original Fortran 77 interface. So the argument -7 corresponds here to LDZ argument that is skipped in the Fortran 95 interface.

And really, *at least* does not apply to Fortran 95 arrays. All F95 arrays must have exact dimensions. MKL documentation claims:

Input arguments such as array dimensions are not required in Fortran95 and are skipped from the calling sequence. Array dimensions are reconstructed from the user data that must exactly follow the required array shape.

Thanks,

Vladimir

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

MKL *spevd there is a slow function. It is better to use algorithms of diagonalization for square matrixes. See http://software.intel.com/en-us/forums/showthread.php?t=76595&o=d&s=lr

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page