From 943792dccbeb8288ee46a2d69564aaffeef09af1 Mon Sep 17 00:00:00 2001 From: conrad Date: Fri, 30 Apr 2021 19:42:28 +1000 Subject: [PATCH] add indicators --- .../armadillo_bits/newarp_GenEigsSolver_meat.hpp | 14 +++++++------- .../armadillo_bits/newarp_SymEigsSolver_meat.hpp | 14 +++++++------- .../newarp_UpperHessenbergEigen_meat.hpp | 2 +- .../newarp_UpperHessenbergQR_meat.hpp | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/include/armadillo_bits/newarp_GenEigsSolver_meat.hpp b/include/armadillo_bits/newarp_GenEigsSolver_meat.hpp index c043ff7a..369c4a17 100644 --- a/include/armadillo_bits/newarp_GenEigsSolver_meat.hpp +++ b/include/armadillo_bits/newarp_GenEigsSolver_meat.hpp @@ -29,7 +29,7 @@ GenEigsSolver::factorise_from(uword from_k, uword to_ fac_f = fk; - Col w(dim_n); + Col w(dim_n, arma_zeros_indicator()); eT beta = norm(fac_f); // Keep the upperleft k x k submatrix of H and set other elements to 0 fac_H.tail_cols(ncv - from_k).zeros(); @@ -154,7 +154,7 @@ GenEigsSolver::restart(uword k) // V -> VQ // Q has some elements being zero // The first (ncv - k + i) elements of the i-th column of Q are non-zero - Mat Vs(dim_n, k + 1); + Mat Vs(dim_n, k + 1, arma_nozeros_indicator()); uword nnz; for(uword i = 0; i < k; i++) { @@ -278,8 +278,8 @@ GenEigsSolver::sort_ritzpair() std::vector ind = sorting.index(); - Col< std::complex > new_ritz_val(ncv); - Mat< std::complex > new_ritz_vec(ncv, nev); + Col< std::complex > new_ritz_val(ncv, arma_zeros_indicator() ); + Mat< std::complex > new_ritz_vec(ncv, nev, arma_nozeros_indicator()); std::vector new_ritz_conv(nev); for(uword i = 0; i < nev; i++) @@ -342,7 +342,7 @@ GenEigsSolver::init(eT* init_resid) arma_check( (rnorm < eps), "newarp::GenEigsSolver::init(): initial residual vector cannot be zero" ); v = r / rnorm; - Col w(dim_n); + Col w(dim_n, arma_zeros_indicator()); op.perform_op(v.memptr(), w.memptr()); nmatop++; @@ -407,7 +407,7 @@ GenEigsSolver::eigenvalues() arma_extra_debug_sigprint(); uword nconv = std::count(ritz_conv.begin(), ritz_conv.end(), true); - Col< std::complex > res(nconv); + Col< std::complex > res(nconv, arma_zeros_indicator()); if(nconv > 0) { @@ -440,7 +440,7 @@ GenEigsSolver::eigenvectors(uword nvec) if(nvec > 0) { - Mat< std::complex > ritz_vec_conv(ncv, nvec); + Mat< std::complex > ritz_vec_conv(ncv, nvec, arma_zeros_indicator()); uword j = 0; for(uword i = 0; (i < nev) && (j < nvec); i++) { diff --git a/include/armadillo_bits/newarp_SymEigsSolver_meat.hpp b/include/armadillo_bits/newarp_SymEigsSolver_meat.hpp index 891e7893..33b540f3 100644 --- a/include/armadillo_bits/newarp_SymEigsSolver_meat.hpp +++ b/include/armadillo_bits/newarp_SymEigsSolver_meat.hpp @@ -29,7 +29,7 @@ SymEigsSolver::factorise_from(uword from_k, uword to_ fac_f = fk; - Col w(dim_n); + Col w(dim_n, arma_zeros_indicator()); // Norm of f eT beta = norm(fac_f); // Used to test beta~=0 @@ -159,7 +159,7 @@ SymEigsSolver::restart(uword k) // V -> VQ, only need to update the first k+1 columns // Q has some elements being zero // The first (ncv - k + i) elements of the i-th column of Q are non-zero - Mat Vs(dim_n, k + 1); + Mat Vs(dim_n, k + 1, arma_nozeros_indicator()); uword nnz; for(uword i = 0; i < k; i++) { @@ -291,8 +291,8 @@ SymEigsSolver::sort_ritzpair() std::vector ind = sorting.index(); - Col new_ritz_val(ncv); - Mat new_ritz_vec(ncv, nev); + Col new_ritz_val(ncv, arma_zeros_indicator() ); + Mat new_ritz_vec(ncv, nev, arma_nozeros_indicator()); std::vector new_ritz_conv(nev); for(uword i = 0; i < nev; i++) @@ -356,7 +356,7 @@ SymEigsSolver::init(eT* init_resid) arma_check( (rnorm < near0), "newarp::SymEigsSolver::init(): initial residual vector cannot be zero" ); v = r / rnorm; - Col w(dim_n); + Col w(dim_n, arma_zeros_indicator()); op.perform_op(v.memptr(), w.memptr()); nmatop++; @@ -425,7 +425,7 @@ SymEigsSolver::eigenvalues() arma_extra_debug_sigprint(); uword nconv = std::count(ritz_conv.begin(), ritz_conv.end(), true); - Col res(nconv); + Col res(nconv, arma_zeros_indicator()); if(nconv > 0) { @@ -458,7 +458,7 @@ SymEigsSolver::eigenvectors(uword nvec) if(nvec > 0) { - Mat ritz_vec_conv(ncv, nvec); + Mat ritz_vec_conv(ncv, nvec, arma_zeros_indicator()); uword j = 0; for(uword i = 0; i < nev && j < nvec; i++) diff --git a/include/armadillo_bits/newarp_UpperHessenbergEigen_meat.hpp b/include/armadillo_bits/newarp_UpperHessenbergEigen_meat.hpp index 15c8d294..90eef08f 100644 --- a/include/armadillo_bits/newarp_UpperHessenbergEigen_meat.hpp +++ b/include/armadillo_bits/newarp_UpperHessenbergEigen_meat.hpp @@ -122,7 +122,7 @@ UpperHessenbergEigen::eigenvectors() arma_debug_check( (computed == false), "newarp::UpperHessenbergEigen::eigenvectors(): need to call compute() first" ); // Lapack will set the imaginary parts of real eigenvalues to be exact zero - Mat< std::complex > evecs(n, n); + Mat< std::complex > evecs(n, n, arma_zeros_indicator()); std::complex* col_ptr = evecs.memptr(); diff --git a/include/armadillo_bits/newarp_UpperHessenbergQR_meat.hpp b/include/armadillo_bits/newarp_UpperHessenbergQR_meat.hpp index 3d4cda8b..208bf8d2 100644 --- a/include/armadillo_bits/newarp_UpperHessenbergQR_meat.hpp +++ b/include/armadillo_bits/newarp_UpperHessenbergQR_meat.hpp @@ -273,7 +273,7 @@ TridiagQR::matrix_RQ() arma_debug_check( (this->computed == false), "newarp::TridiagQR::matrix_RQ(): need to call compute() first" ); // Make a copy of the R matrix - Mat RQ(this->n, this->n, fill::zeros); + Mat RQ(this->n, this->n, arma_zeros_indicator()); RQ.diag() = this->mat_T.diag(); RQ.diag(1) = this->mat_T.diag(1);