From a5cf0d6b621f9d369db4d39daeb7ca4c8482d0b0 Mon Sep 17 00:00:00 2001 From: conrad Date: Tue, 14 Feb 2023 01:55:16 +1000 Subject: [PATCH] simplifications --- include/armadillo_bits/sp_auxlib_meat.hpp | 37 ++++++++--------------- 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/include/armadillo_bits/sp_auxlib_meat.hpp b/include/armadillo_bits/sp_auxlib_meat.hpp index 2de68d59..ddfaec67 100644 --- a/include/armadillo_bits/sp_auxlib_meat.hpp +++ b/include/armadillo_bits/sp_auxlib_meat.hpp @@ -491,13 +491,11 @@ sp_auxlib::eigs_sym_arpack(Col& eigval, Mat& eigvec, const SpMat& X, char howmny = 'A'; char bmat = 'I'; // We are considering the standard eigenvalue problem. - podarray select(ncv); // Logical array of dimension NCV. + podarray select(ncv, arma_zeros_indicator()); // Logical array of dimension NCV. blas_int ldz = n; - select.zeros(); - // seupd() will output directly into the eigval and eigvec objects. - eigval.zeros(n_eigvals); + eigval.zeros( n_eigvals); eigvec.zeros(n, n_eigvals); arpack::seupd(&rvec, &howmny, select.memptr(), eigval.memptr(), eigvec.memptr(), &ldz, (eT*) &sigma, &bmat, &n, which, &nev, &tol, resid.memptr(), &ncv, v.memptr(), &ldv, iparam.memptr(), ipntr.memptr(), workd.memptr(), workl.memptr(), &lworkl, &info); @@ -877,18 +875,13 @@ sp_auxlib::eigs_gen_arpack(Col< std::complex >& eigval, Mat< std::complex char howmny = 'A'; char bmat = 'I'; // We are considering the standard eigenvalue problem. - podarray select(ncv); // logical array of dimension NCV - podarray dr(nev + 1); // real array of dimension NEV + 1 - podarray di(nev + 1); // real array of dimension NEV + 1 - podarray z(n * (nev + 1)); // real N by NEV array if HOWMNY = 'A' - blas_int ldz = n; - podarray workev(3 * ncv); + podarray select(ncv, arma_zeros_indicator()); // logical array of dimension NCV + podarray dr(nev + 1, arma_zeros_indicator()); // real array of dimension NEV + 1 + podarray di(nev + 1, arma_zeros_indicator()); // real array of dimension NEV + 1 + podarray z(n * (nev + 1), arma_zeros_indicator()); // real N by NEV array if HOWMNY = 'A' + podarray workev(3 * ncv, arma_zeros_indicator()); - select.zeros(); - dr.zeros(); - di.zeros(); - z.zeros(); - workev.zeros(); + blas_int ldz = n; arpack::neupd(&rvec, &howmny, select.memptr(), dr.memptr(), di.memptr(), z.memptr(), &ldz, (T*) &sigmar, (T*) &sigmai, workev.memptr(), &bmat, &n, which, &nev, &tol, resid.memptr(), &ncv, v.memptr(), &ldv, iparam.memptr(), ipntr.memptr(), workd.memptr(), workl.memptr(), &lworkl, rwork.memptr(), &info); @@ -1124,16 +1117,12 @@ sp_auxlib::eigs_gen(Col< std::complex >& eigval, Mat< std::complex >& eigv char howmny = 'A'; char bmat = 'I'; // We are considering the standard eigenvalue problem. - podarray select(ncv); // logical array of dimension NCV - podarray> d(nev + 1); // complex array of dimension NEV + 1 - podarray> z(n * nev); // complex N by NEV array if HOWMNY = 'A' - blas_int ldz = n; - podarray> workev(2 * ncv); + podarray select(ncv, arma_zeros_indicator()); // logical array of dimension NCV + podarray> d(nev + 1, arma_zeros_indicator()); // complex array of dimension NEV + 1 + podarray> z(n * nev, arma_zeros_indicator()); // complex N by NEV array if HOWMNY = 'A' + podarray> workev(2 * ncv, arma_zeros_indicator()); - select.zeros(); - d.zeros(); - z.zeros(); - workev.zeros(); + blas_int ldz = n; // Prepare the outputs; neupd() will write directly to them. eigval.zeros(n_eigvals);