1c1fff1c6SRichard Tran Mills 2c1fff1c6SRichard Tran Mills static char help[] = "Tests MATCENTERING matrix type.\n\n"; 3c1fff1c6SRichard Tran Mills 4c1fff1c6SRichard Tran Mills #include <petscmat.h> 5c1fff1c6SRichard Tran Mills 6c1fff1c6SRichard Tran Mills int main(int argc,char **argv) 7c1fff1c6SRichard Tran Mills { 8c1fff1c6SRichard Tran Mills PetscErrorCode ierr; 9c1fff1c6SRichard Tran Mills PetscInt n; 10c1fff1c6SRichard Tran Mills Mat C; 11c1fff1c6SRichard Tran Mills Vec x,y; 12c1fff1c6SRichard Tran Mills PetscReal norm; 13c1fff1c6SRichard Tran Mills PetscMPIInt size; 14c1fff1c6SRichard Tran Mills 15c1fff1c6SRichard Tran Mills ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; 16*5f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size)); 17c1fff1c6SRichard Tran Mills 18c1fff1c6SRichard Tran Mills /* Create a parallel vector with 10*size total entries, and fill it with 1s. */ 19c1fff1c6SRichard Tran Mills n = 10*size; 20*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecCreate(PETSC_COMM_WORLD,&x)); 21*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecSetSizes(x,PETSC_DECIDE,n)); 22*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecSetFromOptions(x)); 23*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecSet(x,1.0)); 24c1fff1c6SRichard Tran Mills 25c1fff1c6SRichard Tran Mills /* Create a corresponding n x n centering matrix and use it to create a mean-centered y = C * x. */ 26*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDuplicate(x,&y)); 27*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatCreateCentering(PETSC_COMM_WORLD,PETSC_DECIDE,n,&C)); 28*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatMult(C,x,y)); 29c1fff1c6SRichard Tran Mills 30c1fff1c6SRichard Tran Mills /* Verify that the centered vector y has norm 0. */ 31*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecNorm(y,NORM_2,&norm)); 32*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"Vector norm after MatMult() with centering matrix applied to vector of ones is %f.\n",(double)norm)); 33c1fff1c6SRichard Tran Mills 34c1fff1c6SRichard Tran Mills /* Now repeat, but using MatMultTranspose(). */ 35*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatMultTranspose(C,x,y)); 36*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecNorm(y,NORM_2,&norm)); 37*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"Vector norm after MatMultTranspose() with centering matrix applied to vector of ones is %f.\n",(double)norm)); 38c1fff1c6SRichard Tran Mills 39c1fff1c6SRichard Tran Mills /* Clean up. */ 40*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDestroy(&x)); 41*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDestroy(&y)); 42*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatDestroy(&C)); 43c1fff1c6SRichard Tran Mills ierr = PetscFinalize(); 44c1fff1c6SRichard Tran Mills return ierr; 45c1fff1c6SRichard Tran Mills } 46c1fff1c6SRichard Tran Mills 47c1fff1c6SRichard Tran Mills /*TEST 48c1fff1c6SRichard Tran Mills 49c1fff1c6SRichard Tran Mills test: 50c1fff1c6SRichard Tran Mills suffix: 1 51c1fff1c6SRichard Tran Mills nsize: 1 52c1fff1c6SRichard Tran Mills output_file: output/ex247.out 53c1fff1c6SRichard Tran Mills 54c1fff1c6SRichard Tran Mills test: 55c1fff1c6SRichard Tran Mills suffix: 2 56c1fff1c6SRichard Tran Mills nsize: 2 57c1fff1c6SRichard Tran Mills output_file: output/ex247.out 58c1fff1c6SRichard Tran Mills 59c1fff1c6SRichard Tran Mills TEST*/ 60