diff --git a/CHANGES b/CHANGES index a15d979..dca9e9b 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,8 @@ arpack-ng - 3.9.0 +[ Zhentao Wang ] +* [BUG FIX] parpack.h and parpack.hpp: type of rwork should be real instead of complex. + [ Jose E. Roman ] * Avoid using isnan() in tests, since is GNU-specific diff --git a/ICB/parpack.h b/ICB/parpack.h index 29eacc0..7d65d26 100644 --- a/ICB/parpack.h +++ b/ICB/parpack.h @@ -14,8 +14,8 @@ extern "C" { #endif -void pcnaupd_c(MPI_Fint comm, a_int* ido, char const* bmat, a_int n, char const* which, a_int nev, float tol, a_fcomplex* resid, a_int ncv, a_fcomplex* v, a_int ldv, a_int* iparam, a_int* ipntr, a_fcomplex* workd, a_fcomplex* workl, a_int lworkl, a_fcomplex* rwork, a_int* info); -void pcneupd_c(MPI_Fint comm, a_int rvec, char const* howmny, a_int const* select, a_fcomplex* d, a_fcomplex* z, a_int ldz, a_fcomplex sigma, a_fcomplex* workev, char const* bmat, a_int n, char const* which, a_int nev, float tol, a_fcomplex* resid, a_int ncv, a_fcomplex* v, a_int ldv, a_int* iparam, a_int* ipntr, a_fcomplex* workd, a_fcomplex* workl, a_int lworkl, a_fcomplex* rwork, a_int* info); +void pcnaupd_c(MPI_Fint comm, a_int* ido, char const* bmat, a_int n, char const* which, a_int nev, float tol, a_fcomplex* resid, a_int ncv, a_fcomplex* v, a_int ldv, a_int* iparam, a_int* ipntr, a_fcomplex* workd, a_fcomplex* workl, a_int lworkl, float* rwork, a_int* info); +void pcneupd_c(MPI_Fint comm, a_int rvec, char const* howmny, a_int const* select, a_fcomplex* d, a_fcomplex* z, a_int ldz, a_fcomplex sigma, a_fcomplex* workev, char const* bmat, a_int n, char const* which, a_int nev, float tol, a_fcomplex* resid, a_int ncv, a_fcomplex* v, a_int ldv, a_int* iparam, a_int* ipntr, a_fcomplex* workd, a_fcomplex* workl, a_int lworkl, float* rwork, a_int* info); void pdnaupd_c(MPI_Fint comm, a_int* ido, char const* bmat, a_int n, char const* which, a_int nev, double tol, double* resid, a_int ncv, double* v, a_int ldv, a_int* iparam, a_int* ipntr, double* workd, double* workl, a_int lworkl, a_int* info); void pdneupd_c(MPI_Fint comm, a_int rvec, char const* howmny, a_int const* select, double* dr, double* di, double* z, a_int ldz, double sigmar, double sigmai, double * workev, char const* bmat, a_int n, char const* which, a_int nev, double tol, double* resid, a_int ncv, double* v, a_int ldv, a_int* iparam, a_int* ipntr, double* workd, double* workl, a_int lworkl, a_int* info); void pdsaupd_c(MPI_Fint comm, a_int* ido, char const* bmat, a_int n, char const* which, a_int nev, double tol, double* resid, a_int ncv, double* v, a_int ldv, a_int* iparam, a_int* ipntr, double* workd, double* workl, a_int lworkl, a_int* info); @@ -24,8 +24,8 @@ void psnaupd_c(MPI_Fint comm, a_int* ido, char const* bmat, a_int n, char const* void psneupd_c(MPI_Fint comm, a_int rvec, char const* howmny, a_int const* select, float* dr, float* di, float* z, a_int ldz, float sigmar, float sigmai, float * workev, char const* bmat, a_int n, char const* which, a_int nev, float tol, float* resid, a_int ncv, float* v, a_int ldv, a_int* iparam, a_int* ipntr, float* workd, float* workl, a_int lworkl, a_int* info); void pssaupd_c(MPI_Fint comm, a_int* ido, char const* bmat, a_int n, char const* which, a_int nev, float tol, float* resid, a_int ncv, float* v, a_int ldv, a_int* iparam, a_int* ipntr, float* workd, float* workl, a_int lworkl, a_int* info); void psseupd_c(MPI_Fint comm, a_int rvec, char const* howmny, a_int const* select, float* d, float* z, a_int ldz, float sigma, char const* bmat, a_int n, char const* which, a_int nev, float tol, float* resid, a_int ncv, float* v, a_int ldv, a_int* iparam, a_int* ipntr, float* workd, float* workl, a_int lworkl, a_int* info); -void pznaupd_c(MPI_Fint comm, a_int* ido, char const* bmat, a_int n, char const* which, a_int nev, double tol, a_dcomplex* resid, a_int ncv, a_dcomplex* v, a_int ldv, a_int* iparam, a_int* ipntr, a_dcomplex* workd, a_dcomplex* workl, a_int lworkl, a_dcomplex* rwork, a_int* info); -void pzneupd_c(MPI_Fint comm, a_int rvec, char const* howmny, a_int const* select, a_dcomplex* d, a_dcomplex* z, a_int ldz, a_dcomplex sigma, a_dcomplex* workev, char const* bmat, a_int n, char const* which, a_int nev, double tol, a_dcomplex* resid, a_int ncv, a_dcomplex* v, a_int ldv, a_int* iparam, a_int* ipntr, a_dcomplex* workd, a_dcomplex* workl, a_int lworkl, a_dcomplex* rwork, a_int* info); +void pznaupd_c(MPI_Fint comm, a_int* ido, char const* bmat, a_int n, char const* which, a_int nev, double tol, a_dcomplex* resid, a_int ncv, a_dcomplex* v, a_int ldv, a_int* iparam, a_int* ipntr, a_dcomplex* workd, a_dcomplex* workl, a_int lworkl, double* rwork, a_int* info); +void pzneupd_c(MPI_Fint comm, a_int rvec, char const* howmny, a_int const* select, a_dcomplex* d, a_dcomplex* z, a_int ldz, a_dcomplex sigma, a_dcomplex* workev, char const* bmat, a_int n, char const* which, a_int nev, double tol, a_dcomplex* resid, a_int ncv, a_dcomplex* v, a_int ldv, a_int* iparam, a_int* ipntr, a_dcomplex* workd, a_dcomplex* workl, a_int lworkl, double* rwork, a_int* info); #ifdef __cplusplus } diff --git a/ICB/parpack.hpp b/ICB/parpack.hpp index b26aaaa..fe93a77 100644 --- a/ICB/parpack.hpp +++ b/ICB/parpack.hpp @@ -111,14 +111,14 @@ inline void naupd(MPI_Fint comm, a_int& ido, bmat const bmat_option, a_int n, std::complex* resid, a_int ncv, std::complex* v, a_int ldv, a_int* iparam, a_int* ipntr, std::complex* workd, std::complex* workl, a_int lworkl, - std::complex* rwork, a_int& info) { + float* rwork, a_int& info) { internal::pcnaupd_c(comm, &ido, internal::convert_to_char(bmat_option), n, internal::convert_to_char(which_option), nev, tol, reinterpret_cast(resid), ncv, reinterpret_cast(v), ldv, iparam, ipntr, reinterpret_cast(workd), reinterpret_cast(workl), lworkl, - reinterpret_cast(rwork), &info); + rwork, &info); } inline void neupd(MPI_Fint comm, a_int rvec, howmny const howmny_option, @@ -129,7 +129,7 @@ inline void neupd(MPI_Fint comm, a_int rvec, howmny const howmny_option, std::complex* resid, a_int ncv, std::complex* v, a_int ldv, a_int* iparam, a_int* ipntr, std::complex* workd, std::complex* workl, a_int lworkl, - std::complex* rwork, a_int& info) + float* rwork, a_int& info) { std::complex sigma2 = sigma; @@ -144,7 +144,7 @@ inline void neupd(MPI_Fint comm, a_int rvec, howmny const howmny_option, reinterpret_cast(v), ldv, iparam, ipntr, reinterpret_cast(workd), reinterpret_cast(workl), lworkl, - reinterpret_cast(rwork), &info); + rwork, &info); } inline void naupd(MPI_Fint comm, a_int& ido, bmat const bmat_option, a_int n, @@ -152,14 +152,14 @@ inline void naupd(MPI_Fint comm, a_int& ido, bmat const bmat_option, a_int n, std::complex* resid, a_int ncv, std::complex* v, a_int ldv, a_int* iparam, a_int* ipntr, std::complex* workd, std::complex* workl, a_int lworkl, - std::complex* rwork, a_int& info) { + double* rwork, a_int& info) { internal::pznaupd_c(comm, &ido, internal::convert_to_char(bmat_option), n, internal::convert_to_char(which_option), nev, tol, reinterpret_cast(resid), ncv, reinterpret_cast(v), ldv, iparam, ipntr, reinterpret_cast(workd), reinterpret_cast(workl), lworkl, - reinterpret_cast(rwork), &info); + rwork, &info); } inline void neupd(MPI_Fint comm, a_int rvec, howmny const howmny_option, @@ -170,7 +170,7 @@ inline void neupd(MPI_Fint comm, a_int rvec, howmny const howmny_option, std::complex* resid, a_int ncv, std::complex* v, a_int ldv, a_int* iparam, a_int* ipntr, std::complex* workd, std::complex* workl, a_int lworkl, - std::complex* rwork, a_int& info) { + double* rwork, a_int& info) { std::complex sigma2 = sigma; internal::pzneupd_c(comm, rvec, internal::convert_to_char(howmny_option), select, reinterpret_cast(d), @@ -183,7 +183,7 @@ inline void neupd(MPI_Fint comm, a_int rvec, howmny const howmny_option, reinterpret_cast(v), ldv, iparam, ipntr, reinterpret_cast(workd), reinterpret_cast(workl), lworkl, - reinterpret_cast(rwork), &info); + rwork, &info); } } // namespace arpack #endif diff --git a/PARPACK/SRC/MPI/icbpcn.F90 b/PARPACK/SRC/MPI/icbpcn.F90 index 8bbaf0e..11e3b89 100644 --- a/PARPACK/SRC/MPI/icbpcn.F90 +++ b/PARPACK/SRC/MPI/icbpcn.F90 @@ -22,7 +22,7 @@ subroutine pcnaupd_c(comm, ido, bmat, n, which, nev, tol, resid, ncv, v, ldv,& complex(kind=c_float_complex),dimension(3*n), intent(out) :: workd complex(kind=c_float_complex),dimension(lworkl), intent(out) :: workl integer(kind=i_int), value, intent(in) :: lworkl - complex(kind=c_float_complex),dimension(ncv), intent(out) :: rwork + real(kind=c_float), dimension(ncv), intent(out) :: rwork integer(kind=i_int), intent(inout) :: info character(len=2):: w @@ -66,7 +66,7 @@ subroutine pcneupd_c(comm, rvec, howmny, select, d, z, ldz, sigma, workev,& complex(kind=c_float_complex),dimension(3*n), intent(out) :: workd complex(kind=c_float_complex),dimension(lworkl), intent(out) :: workl integer(kind=i_int), value, intent(in) :: lworkl - complex(kind=c_float_complex),dimension(ncv), intent(out) :: rwork + real(kind=c_float), dimension(ncv), intent(out) :: rwork integer(kind=i_int), intent(inout) :: info ! convert parameters if needed. diff --git a/PARPACK/SRC/MPI/icbpzn.F90 b/PARPACK/SRC/MPI/icbpzn.F90 index 2c8cf61..6e436d3 100644 --- a/PARPACK/SRC/MPI/icbpzn.F90 +++ b/PARPACK/SRC/MPI/icbpzn.F90 @@ -22,7 +22,7 @@ subroutine pznaupd_c(comm, ido, bmat, n, which, nev, tol, resid, ncv, v, ldv,& complex(kind=c_double_complex), dimension(3*n), intent(out) :: workd complex(kind=c_double_complex), dimension(lworkl), intent(out) :: workl integer(kind=i_int), value, intent(in) :: lworkl - complex(kind=c_double_complex), dimension(ncv), intent(out) :: rwork + real(kind=c_double), dimension(ncv), intent(out) :: rwork integer(kind=i_int), intent(inout) :: info character(len=2):: w @@ -66,7 +66,7 @@ subroutine pzneupd_c(comm, rvec, howmny, select, d, z, ldz, sigma, workev,& complex(kind=c_double_complex), dimension(3*n), intent(out) :: workd complex(kind=c_double_complex), dimension(lworkl), intent(out) :: workl integer(kind=i_int), value, intent(in) :: lworkl - complex(kind=c_double_complex), dimension(ncv), intent(out) :: rwork + real(kind=c_double), dimension(ncv), intent(out) :: rwork integer(kind=i_int), intent(inout) :: info ! convert parameters if needed.