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