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