#include /*I "petscmat.h" I*/ PetscErrorCode MatMult_Centering(Mat A,Vec xx,Vec yy) { PetscScalar *y; const PetscScalar *x; PetscScalar sum,mean; PetscInt i,m=A->rmap->n,size; PetscFunctionBegin; CHKERRQ(VecSum(xx,&sum)); CHKERRQ(VecGetSize(xx,&size)); mean = sum / (PetscScalar)size; CHKERRQ(VecGetArrayRead(xx,&x)); CHKERRQ(VecGetArray(yy,&y)); for (i=0; iops->mult = MatMult_Centering; (*C)->assembled = PETSC_TRUE; (*C)->preallocated = PETSC_TRUE; (*C)->symmetric = PETSC_TRUE; (*C)->symmetric_eternal = PETSC_TRUE; CHKERRQ(MatSetUp(*C)); PetscFunctionReturn(0); }