diff --git a/dune/xt/common/fmatrix-2.6.hh b/dune/xt/common/fmatrix-2.6.hh index ab81de582ec5ac31c2073eca8c6faf86cae6e5ef..79a46850e63cbfdc03c9c5c9b02c3b053281f907 100644 --- a/dune/xt/common/fmatrix-2.6.hh +++ b/dune/xt/common/fmatrix-2.6.hh @@ -242,7 +242,7 @@ inline void FieldMatrix<K, ROWS, COLS>::luDecomposition(FieldMatrix<K, ROWS, COL if (imax != i) { for (size_type j = 0; j < ROWS; j++) std::swap(A[i][j], A[imax][j]); - assert(imax < std::numeric_limits<int>::max() && i < std::numeric_limits<int>::max()); + assert(imax < size_type(std::numeric_limits<int>::max()) && i < size_type(std::numeric_limits<int>::max())); func.swap(static_cast<int>(i), static_cast<int>(imax)); // swap the pivot or rhs } @@ -256,7 +256,7 @@ inline void FieldMatrix<K, ROWS, COLS>::luDecomposition(FieldMatrix<K, ROWS, COL A[k][i] = factor; for (size_type j = i + 1; j < ROWS; j++) A[k][j] -= factor * A[i][j]; - assert(k < std::numeric_limits<int>::max() && i < std::numeric_limits<int>::max()); + assert(k < size_type(std::numeric_limits<int>::max()) && i < size_type(std::numeric_limits<int>::max())); func(factor, static_cast<int>(k), static_cast<int>(i)); } } diff --git a/dune/xt/functions/base/combined-functions.hh b/dune/xt/functions/base/combined-functions.hh index d8ffaf9cc513b9940c69ad26ab1cd5182a672ed4..becf193985f5bdd29024bb0703c069c751238c68 100644 --- a/dune/xt/functions/base/combined-functions.hh +++ b/dune/xt/functions/base/combined-functions.hh @@ -356,7 +356,6 @@ public: int order(const XT::Common::Parameter& param = {}) const override final { auto ret = Select::order(left_->access().order(param), right_->access().order(param)); - assert(ret < std::numeric_limits<int>::max()); return static_cast<int>(ret); } diff --git a/dune/xt/functions/base/combined-grid-functions.hh b/dune/xt/functions/base/combined-grid-functions.hh index e5cd8ef7409c6745f0f0496cc6915632ff9e5f73..409c18bb22411886ef5e5ec14a59ab8516474e5d 100644 --- a/dune/xt/functions/base/combined-grid-functions.hh +++ b/dune/xt/functions/base/combined-grid-functions.hh @@ -281,7 +281,6 @@ public: int order(const XT::Common::Parameter& param = {}) const override final { const auto ret = Select::order(left_local_->order(param), right_local_->order(param)); - assert(ret < std::numeric_limits<int>::max()); return static_cast<int>(ret); } diff --git a/dune/xt/la/algorithms/cholesky.hh b/dune/xt/la/algorithms/cholesky.hh index df0b4d4de7bab39be37307ccb1799ded4c6c5f82..25d808144ccd095dd3e62bdb13bc4555b41257a3 100644 --- a/dune/xt/la/algorithms/cholesky.hh +++ b/dune/xt/la/algorithms/cholesky.hh @@ -216,7 +216,7 @@ struct CholeskySolver const int lapacke_storage_layout = (storage_layout == Common::StorageLayout::dense_row_major) ? Common::Lapacke::row_major() : Common::Lapacke::col_major(); - assert(size <= std::numeric_limits<int>::max()); + assert(size <= size_t(std::numeric_limits<int>::max())); int info = Common::Lapacke::dpotrf_work( lapacke_storage_layout, 'L', static_cast<int>(size), M::data(A), static_cast<int>(size)); if (info) @@ -256,7 +256,7 @@ struct LDLTSolver if (subdiag.size() != size - 1) DUNE_THROW(InvalidStateException, "Wrong size of diag and subdiag!"); #if HAVE_MKL || HAVE_LAPACKE - assert(size <= std::numeric_limits<int>::max()); + assert(size <= size_t(std::numeric_limits<int>::max())); auto info = Common::Lapacke::dpttrf(static_cast<int>(size), Common::data(diag), Common::data(subdiag)); if (info) DUNE_THROW(Dune::MathError, "Lapacke_dpptrf returned an error code!"); @@ -274,7 +274,7 @@ struct LDLTSolver ; #if HAVE_MKL || HAVE_LAPACKE } else if (is_contiguous) { - assert(V::is_vector || std::max(M::cols(rhs), size) <= std::numeric_limits<int>::max()); + assert(V::is_vector || std::max(M::cols(rhs), size) <= size_t(std::numeric_limits<int>::max())); int rhs_cols = V::is_vector ? 1 : int(M::cols(rhs)); int info = Common::Lapacke::dpttrs(is_row_major ? Common::Lapacke::row_major() : Common::Lapacke::col_major(), static_cast<int>(size), diff --git a/dune/xt/la/algorithms/qr.hh b/dune/xt/la/algorithms/qr.hh index 43f7a2884e7c29d4200c3356ae9e745e336678a4..26a4324ca2864962eb223ca1463da0d97782cb8a 100644 --- a/dune/xt/la/algorithms/qr.hh +++ b/dune/xt/la/algorithms/qr.hh @@ -145,7 +145,7 @@ void qr_decomposition(MatrixType& A, VectorType& tau, IndexVectorType& permutati const size_t num_cols = M::cols(A); assert(tau.size() == num_cols && permutations.size() == num_cols); std::fill(tau.begin(), tau.end(), 0.); - assert(num_cols < std::numeric_limits<IndexType>::max()); + assert(num_cols < size_t(std::numeric_limits<IndexType>::max())); for (size_t ii = 0; ii < num_cols; ++ii) VI::set_entry(permutations, ii, static_cast<IndexType>(ii)); @@ -259,7 +259,7 @@ struct QrHelper #if HAVE_LAPACKE || HAVE_MKL } else if (has_contiguous_storage && M::rows(A) > 10) { std::fill(permutations.begin(), permutations.end(), 0.); - assert(std::max(M::rows(A), M::cols(A)) < std::numeric_limits<int>::max()); + assert(std::max(M::rows(A), M::cols(A)) < size_t(std::numeric_limits<int>::max())); auto num_rows = static_cast<int>(M::rows(A)); auto num_cols = static_cast<int>(M::cols(A)); auto info = geqp3(lapacke_storage_layout(), @@ -297,7 +297,7 @@ struct QrHelper for (size_t ii = 0; ii < num_rows; ++ii) for (size_t jj = 0; jj < num_cols; ++jj) Mret::set_entry(ret, ii, jj, M::get_entry(QR, ii, jj)); - assert(std::max(M::rows(QR), M::cols(QR)) < std::numeric_limits<int>::max()); + assert(std::max(M::rows(QR), M::cols(QR)) < size_t(std::numeric_limits<int>::max())); auto info = calculate_q(lapacke_storage_layout(), static_cast<int>(num_rows), static_cast<int>(num_rows), @@ -331,7 +331,7 @@ struct QrHelper } else if (has_contiguous_storage && num_rows > 10) { // These are the number of rows and columns of the matrix C in the documentation of dormqr. // As we only have a vector, i.e. C = x, the number of columns is 1. - assert(x.size() < std::numeric_limits<int>::max()); + assert(x.size() < size_t(std::numeric_limits<int>::max())); const int num_rhs_rows = static_cast<int>(x.size()); const int num_rhs_cols = 1; auto info = multiply_by_q(lapacke_storage_layout(), @@ -349,7 +349,7 @@ struct QrHelper DUNE_THROW(Dune::MathError, "Multiplication by Q or Q^T failed"); #endif // HAVE_LAPACKE || HAVE_MKL } else { - assert(num_cols < std::numeric_limits<int>::max()); + assert(num_cols < size_t(std::numeric_limits<int>::max())); auto w = W::create(num_rows, ScalarType(0.)); if (transpose == XT::Common::Transpose::no) for (int jj = static_cast<int>(num_cols) - 1; jj >= 0; --jj) { @@ -575,7 +575,7 @@ void solve_qr_factorized(const MatrixType& QR, } // Undo permutations - assert(num_rows <= std::numeric_limits<int>::max()); + assert(num_rows <= size_t(std::numeric_limits<int>::max())); for (int ii = 0; ii < static_cast<int>(num_rows); ++ii) V2::set_entry(x, VI::get_entry(permutations, ii), V2::get_entry(*work, ii)); } diff --git a/dune/xt/la/algorithms/triangular_solves.hh b/dune/xt/la/algorithms/triangular_solves.hh index 1e9e3819246f41be34e8517ab2036490094bbff6..f1554c9758d8aaf59b853a8f86dca6b98e433f37 100644 --- a/dune/xt/la/algorithms/triangular_solves.hh +++ b/dune/xt/la/algorithms/triangular_solves.hh @@ -52,7 +52,7 @@ void backward_solve(const MatrixType& A, VectorType& x, VectorType& rhs) typedef Common::MatrixAbstraction<MatrixType> M; const size_t num_rows = M::rows(A); const size_t num_cols = num_rows; - assert(num_rows < std::numeric_limits<int>::max()); + assert(num_rows < size_t(std::numeric_limits<int>::max())); for (int ii = static_cast<int>(num_rows) - 1; ii >= 0.; --ii) { for (size_t jj = static_cast<size_t>(ii) + 1; jj < num_cols; ++jj) rhs[ii] -= M::get_entry(A, transposed ? jj : ii, transposed ? ii : jj) * x[jj]; @@ -119,7 +119,7 @@ backward_solve_csr(const MatrixType& A, VectorType& x, VectorType& rhs) const auto* entries = A.entries(); const auto* row_pointers = A.outer_index_ptr(); const auto* column_indices = A.inner_index_ptr(); - assert(A.rows() <= std::numeric_limits<int>::max()); + assert(A.rows() <= size_t(std::numeric_limits<int>::max())); for (int ii = static_cast<int>(A.rows()) - 1; ii >= 0; ii--) { // row_pointers[ii] is the diagonal entry as we assume a upper triangular matrix with non-zero entries on the // diagonal @@ -140,7 +140,7 @@ backward_solve_csc(const MatrixType& A, VectorType& x, VectorType& rhs) const auto* entries = A.entries(); const auto* column_pointers = A.outer_index_ptr(); const auto* row_indices = A.inner_index_ptr(); - assert(A.rows() <= std::numeric_limits<int>::max()); + assert(A.rows() <= size_t(std::numeric_limits<int>::max())); for (int ii = static_cast<int>(A.rows()) - 1; ii >= 0; ii--) { // column_pointers[ii+1]-1 is the diagonal entry as we assume an upper triangular matrix with non-zero entries // on the diagonal @@ -203,7 +203,7 @@ struct TriangularSolver { auto* xp = V::data(x); // get pointer to x auto* rhs = xp; // use x to store rhs - assert(std::max(M::rows(A), M::cols(A)) <= std::numeric_limits<int>::max()); + assert(std::max(M::rows(A), M::cols(A)) <= size_t(std::numeric_limits<int>::max())); const int num_rows = static_cast<int>(M::rows(A)); const int num_cols = static_cast<int>(M::cols(A)); constexpr bool trans = (transpose == Common::Transpose::yes); diff --git a/dune/xt/la/container/pattern.cc b/dune/xt/la/container/pattern.cc index 4bf9dcfc5a1ffdd5d330198329f15a49a05b0c1e..acb6fc49b4583b4a5cfe3a423ade53ceb9c545cc 100644 --- a/dune/xt/la/container/pattern.cc +++ b/dune/xt/la/container/pattern.cc @@ -148,10 +148,12 @@ SparsityPatternDefault dense_pattern(const size_t rows, const size_t cols) SparsityPatternDefault tridiagonal_pattern(const size_t rows, const size_t cols) { SparsityPatternDefault ret(rows); - assert(rows <= std::numeric_limits<int>::max() && cols <= std::numeric_limits<int>::max()); - for (int ii = 0; ii < int(rows); ++ii) - for (int jj = std::max(0, ii - 1); jj <= std::min(ii + 1, int(cols) - 1); ++jj) + for (size_t ii = 0; ii < rows; ++ii) { + // We have to be careful here if ii == 0 because then ii - 1 wraps around + const size_t col_start = (ii == 0) ? size_t(0) : ii - 1; + for (size_t jj = col_start; jj < std::min(ii + 2, cols); ++jj) ret.insert(ii, jj); + } return ret; } diff --git a/dune/xt/la/eigen-solver/internal/lapacke.hh b/dune/xt/la/eigen-solver/internal/lapacke.hh index b8250dbdea18b1c07e7a62276b2568ad7365caaf..dcf780e14104025345c3e0fa71188a4d902938ab 100644 --- a/dune/xt/la/eigen-solver/internal/lapacke.hh +++ b/dune/xt/la/eigen-solver/internal/lapacke.hh @@ -122,7 +122,7 @@ compute_eigenvalues_of_a_real_matrix_using_lapack_impl( #endif // DUNE_XT_LA_DISABLE_ALL_CHECKS thread_local std::vector<double> real_part_of_eigenvalues(size, 0.); thread_local std::vector<double> imag_part_of_eigenvalues(size, 0.); - assert(size < std::numeric_limits<int>::max()); + assert(size < size_t(std::numeric_limits<int>::max())); int storage_layout = MatrixDataProvider<RealMatrixType, contiguous_and_mutable>::storage_layout == Common::StorageLayout::dense_row_major ? Common::Lapacke::row_major() @@ -243,7 +243,7 @@ compute_eigenvalues_and_right_eigenvectors_of_a_real_matrix_using_lapack_impl( thread_local std::vector<double> imag_part_of_eigenvalues(size); thread_local CommonDenseMatrix<double, MatrixDataProvider<RealMatrixType, contiguous_and_mutable>::storage_layout> right_eigenvectors_matrix(size, size, 0.); - assert(size < std::numeric_limits<int>::max()); + assert(size < size_t(std::numeric_limits<int>::max())); thread_local std::vector<double> work(1); thread_local size_t last_size = -1; if (size != last_size) { diff --git a/dune/xt/la/eigen-solver/internal/shifted-qr.hh b/dune/xt/la/eigen-solver/internal/shifted-qr.hh index b9834fb0d466e69ef416de6d04f5f1ee1672e986..3b689f49fce84d36610862da2e569577b397f2c7 100644 --- a/dune/xt/la/eigen-solver/internal/shifted-qr.hh +++ b/dune/xt/la/eigen-solver/internal/shifted-qr.hh @@ -161,7 +161,7 @@ struct RealQrEigenSolver // do the usual backsubstitution. If we encounter a zero on the diagonal in the process, we just assign // zero to that component. eigvec[kk] = 1.; - assert(kk <= std::numeric_limits<int>::max()); + assert(kk <= size_t(std::numeric_limits<int>::max())); for (int rr = static_cast<int>(kk) - 1; rr >= 0; --rr) { eigvec[rr] = 0.; if (XT::Common::FloatCmp::ne(A[rr][rr], A[kk][kk])) {