The lwork size is incorrect. When queried, it appears to be returning a value of 2*N + nb, but I think the value needs to be 2*N + N*nb. The blocking size nb can be found with magma_get_dsytrd_nb( N ).
I will see about updating the documentation and code to have the correct workspace sizes.
dsytrd does not use iwork, so the liwork is not a factor there. From the documentation for syevd, liwork is suppose to be 1 for jobz=N. (Most probably, iwork is unused in that case, but I didn't verify that.)
- Code: Select all
LIWORK (input) INTEGER
The dimension of the array IWORK.
If N <= 1, LIWORK must be at least 1.
If JOBZ = 'N' and N > 1, LIWORK must be at least 1.
If JOBZ = 'V' and N > 1, LIWORK must be at least 3 + 5*N.