Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

howmny = 'S' not implemented ? #290

Open
ThibaultGH opened this issue Dec 18, 2020 · 13 comments
Open

howmny = 'S' not implemented ? #290

ThibaultGH opened this issue Dec 18, 2020 · 13 comments

Comments

@ThibaultGH
Copy link

Expected behavior

Get eigenvector one by one when second parameter of dseupd, howmny = 'S' and specified which one with array select to better handle memory consumption.

Actual behavior

Return info=-16, this was not implemented.

Where/how to reproduce the problem

  • arpack-ng: don't know...
  • OS: Cray Linux Environment
  • compiler: icc

Steps to reproduce the problem

  • set howmny to 'S', and select = calloc(), select[0]= 1 for instance and run dseupd with those

Error message

info = -16, this was not implemented

@sylvestre
Copy link
Contributor

Two quick questions:

  • is that a recent regression
  • which version of arpack do you use?

Could you please provide a test case reproducing the issue? thanks

@ThibaultGH
Copy link
Author

ThibaultGH commented Dec 18, 2020

Ok I found a way to know, even if the cluster is down right now :

-------------------------------------------------------------------
/global/common/software/nersc/cle7/extra_modulefiles/arpack-ng/3.7.0:

module-whatis placeholder
conflict arpack-ng
setenv ARPACK_NG_DIR /global/common/cori_cle7/software/arpack-ng/3.7.0/hsw
prepend-path CMAKE_PREFIX_PATH /global/common/cori_cle7/software/arpack-ng/3.7.0/hsw
setenv ARPACK_NG_INC /global/common/cori_cle7/software/arpack-ng/3.7.0/hsw/include
prepend-path -d FLAGS -I/global/common/cori_cle7/software/arpack-ng/3.7.0/hsw/include
setenv ARPACK_NG_LIB /global/common/cori_cle7/software/arpack-ng/3.7.0/hsw/lib
prepend-path LD_LIBRARY_PATH /global/common/cori_cle7/software/arpack-ng/3.7.0/hsw/lib
prepend-path -d FLAGS -L/global/common/cori_cle7/software/arpack-ng/3.7.0/hsw/lib
setenv ARPACK_NG_LIB /global/common/cori_cle7/software/arpack-ng/3.7.0/hsw/lib64
prepend-path LD_LIBRARY_PATH /global/common/cori_cle7/software/arpack-ng/3.7.0/hsw/lib64
prepend-path -d FLAGS -L/global/common/cori_cle7/software/arpack-ng/3.7.0/hsw/lib64

So it seems to be arpack-ng/3.7.0

I don't have a test case to provide, sorry

@fghoussen
Copy link
Collaborator

Do you set rvec to .false. ?

if (rvec .and. howmny .eq. 'S') ierr = -16

@ThibaultGH
Copy link
Author

No, I set rvec to true because I want to get the eigenvectors back

@fghoussen
Copy link
Collaborator

No, I set rvec to true because I want to get the eigenvectors back

Sounds like a limitation of arpack, check out : https://www.caam.rice.edu/software/ARPACK/ (dseupd from arpack96.tar.gz)

@ThibaultGH
Copy link
Author

ThibaultGH commented Jan 6, 2021

What do you mean a limitation of arpack ? I've check ARPACK's official documentation they say :
"The character*1 parameter howmny that specifies how many eigenvectors are desired. howmny = 'A': compute nev eigenvectors; howmny = 'S': compute some of the eigenvectors, specified by the logical array select." : https://www.caam.rice.edu/software/ARPACK/UG/node40.html

@fghoussen
Copy link
Collaborator

The error was originally returned by the reference code (as a quick return) : this likely means this case can't be supported unless the doc says so (as it's maybe possible in other case ?). In general, unsupported case (errors) are no set 'by chance' : there is likely a 'good' reason behind. If not supported in the reference code, nobody will make it work : arpack is a 70's walking dead....

@ThibaultGH
Copy link
Author

Well, what do you call the "reference code" ? There is arpack the collection of fortran routines, and in its documentation it is said that this is supported, and there is arpack-ng that is used here as a wrapper of c function that calls the fortran arpack routines.
My guess is that it's just arpack-ng that does not support this feature

@fghoussen
Copy link
Collaborator

fghoussen commented Jan 12, 2021

Well, what do you call the "reference code" ?

Here https://www.caam.rice.edu/software/ARPACK/ is the "real / original " code which is no more maintained (= often a pain to compile on modern architecture with modern libs [MKL]). arpack-ng is a (maintained) fork that aims to make arpack usable (cmake, autotools, C/C++/python bindings, ILP64, MKL, ...) on modern architecture (no dev, only maintain / bug fix on modern arch)

@ThibaultGH
Copy link
Author

Yes exactly, and in the reference code's documentation, it is said you can recover eigenvectors one by one, see the link I put earlier : https://www.caam.rice.edu/software/ARPACK/UG/node40.html
But when I do it with arpack-ng I get this error saying it is not implemented..

@fghoussen
Copy link
Collaborator

Try to do it with code from https://www.caam.rice.edu/software/ARPACK/ : you should get the same problem, if so, report it there.

@ThibaultGH
Copy link
Author

Indeed, I looked into arpack's source code, and in dseupd.f I run into that line :
if (rvec .and. howmny .eq. 'S') ierr = -16
Which stands for "not implemented", so even if the documentation says you can do it, in the code it seems it's just not implemented..
Too bad..

@sylvestre
Copy link
Contributor

Don't hesitate to propose a PR to implement it :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants