// calculates \sum_K v_i'*A*v_i
double dosum(Matrix A, Matrix v)
{
  Matrix v2 = createMatrix(v->rows, v->cols);
  myMxM(A, v, v2);
  double alpha = myinnerproduct(v->as_vec, v2->as_vec);
  freeMatrix(v2);

  return alpha;
}
Example #2
0
// calculates \sum_K v_i'*A*v_i
double dosum(Matrix A, Matrix v)
{
  double alpha=0;
  Vector temp = createVector(A->rows);
  for( int i=0;i<v->cols;++i ) {
    myMxV(temp,A,v->col[i]);
    alpha += myinnerproduct(v->col[i], temp);
  }
  freeVector(temp);

  return alpha;
}
Example #3
0
// calculates \sum_K v_i'*A*v_i
double dosum(Matrix A, Matrix v)
{
  double alpha=0;
  Matrix temp = createMatrix(v->rows, v->cols);
#pragma omp parallel for schedule(static) reduction(+:alpha)
  for( int i=0;i<v->cols;++i ) {
    myMxV(temp->col[i],A,v->col[i]);
    alpha += myinnerproduct(temp->col[i],v->col[i]);
  }
  freeMatrix(temp);

  return alpha;
}
// calculates \sum_K v_i'*A*v_i
double dosum(Matrix A, Matrix v)
{
  double alpha=0;
  int t = omp_get_max_threads();
  Matrix temp = createMatrix(A->rows,t);
#pragma omp parallel for schedule(static) reduction(+:alpha)
  for( int i=0;i<v->cols;++i ) {
    myMxV(temp->col[omp_get_thread_num()],A,v->col[i]);
    alpha += myinnerproduct(temp->col[omp_get_thread_num()],v->col[i]);
  }
  freeMatrix(temp);

  return alpha;
}
Example #5
0
// calculates \sum_K v_i'*A*v_i
double dosum(Matrix A, Matrix v)
{
  double alpha=0;
  Vector temp = createVector(A->rows);
  for( int i=0;i<v->cols;++i ) {
    myMxV(temp,A,v->col[i]);
    alpha += myinnerproduct(temp,v->col[i]);
  }
  freeVector(temp);
#ifdef HAVE_MPI
  double s2=alpha;
  MPI_Allreduce(&s2, &alpha, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
#endif

  return alpha;
}
// calculates \sum_K v_i'*A*v_i
double dosum(Matrix A, Matrix v)
{
    double alpha=0.0;
    Matrix temp;
    int i, t;

    t = getMaxThreads();

    temp = createMatrix(A->rows, t);
    #pragma omp parallel for schedule(static) reduction(+:alpha)
    for(i=0; i<v->cols; ++i) {
        myMxV(temp->col[getCurrentThread()],A,v->col[i]);
        alpha += myinnerproduct(temp->col[getCurrentThread()],v->col[i]);
    }
    freeMatrix(temp);

    return alpha;
}