int bdiag_matrix::calc_lin_comb (t_double alpha, t_double beta, spv_double u_, spv_double v_, spv_double r_) const { static const t_double eps = t_double (1.0e-12); t_long i, n; int r_code = 0; t_double *v = &(*v_)[0]; t_double *r = &(*r_)[0]; t_double d = beta; if (fabs (alpha) > eps) { //BS_ASSERT (u.size ()); //BS_ASSERT (r.size () >= (size_t)(n_rows * n_block_size)); d /= alpha; } if (fabs (beta) > eps) { //BS_ASSERT (v.size ()); //BS_ASSERT (v.size () == r.size ())(v.size ())(r.size ()); //BS_ASSERT (r.size () >= (size_t)(n_rows * n_block_size)) (r.size ()) (n_rows) (n_block_size) (n_rows * n_block_size); } n = (t_long)r_->size (); if (fabs (beta) > eps) { i = 0; t_long n2 = n - (n % 4); // TODO: for (; i < n2; i+=4) { r[i + 0] = v[i + 0] * d; r[i + 1] = v[i + 1] * d; r[i + 2] = v[i + 2] * d; r[i + 3] = v[i + 3] * d; } for (; i < n; ++i) r[i] = v[i] * d; } else { memset (r, 0, sizeof (t_double) * n); } if (fabs (alpha) > eps) { matrix_vector_product_internal <true> (u_, r_, alpha); } return r_code; }
int main(int argc, char **argv) { int verbose = 0; int errors = 0; if (argc > 1 && strcmp(argv[1], "-v") == 0) verbose = 1; errors += t16_bit(verbose); errors += t32_bit(verbose); errors += t64_bit(verbose); errors += t_float(verbose); errors += t_double(verbose); if (errors) { fprintf(stderr, "%d errors\n", errors); return EXIT_FAILURE; } return EXIT_SUCCESS; }