#pragma once #include #include // now we declare functions that we define in benh_funcs.cpp double dot_basic(const std::vector& x, const std::vector& y); double dot_kahan(const std::vector& x, const std::vector& y); double norm_basic(const std::vector& x); void matvec_rowmajor(const std::vector& A, std::size_t M, std::size_t N, const std::vector& x, std::vector& b); void matmul_rowmajor(const std::vector& A, std::size_t M, std::size_t L, const std::vector& B, std::size_t N, std::vector& C); void polyp_horner(const std::vector& a, const std::vector& x, std::vector& y); struct CSR { //compressed Sparse Row std::size_t n; // number of rows std::vector val; // non-zero values std::vector col; // column indices std::vector row_ptr; // row pointers (size n+1) }; void jacobi_csr(const CSR& K, const std::vector& f, std::vector& u, std::size_t max_iter, double omega, double tol);