1 static char help[]= "Test MatSetRandom on MATMPIAIJ matrices\n\n"; 2 3 /* 4 Adapted from an example Contributed-by: Jakub Kruzik <jakub.kruzik@vsb.cz> 5 */ 6 #include <petscmat.h> 7 int main(int argc,char **args) 8 { 9 Mat A[2]; 10 PetscErrorCode ierr; 11 PetscReal nrm,tol=10*PETSC_SMALL; 12 PetscRandom rctx; 13 14 ierr = PetscInitialize(&argc,&args,(char*)0,help);if (ierr) return ierr; 15 ierr = PetscRandomCreate(PETSC_COMM_WORLD,&rctx);CHKERRQ(ierr); 16 17 /* Call MatSetRandom on unassembled matrices */ 18 ierr = MatCreateAIJ(PETSC_COMM_WORLD,PETSC_DECIDE,PETSC_DECIDE,20,20,3,NULL,3,NULL,&A[0]);CHKERRQ(ierr); 19 ierr = MatCreateAIJ(PETSC_COMM_WORLD,PETSC_DECIDE,PETSC_DECIDE,20,20,3,NULL,3,NULL,&A[1]);CHKERRQ(ierr); 20 ierr = MatSetRandom(A[0],rctx);CHKERRQ(ierr); 21 ierr = MatSetRandom(A[1],rctx);CHKERRQ(ierr); 22 23 ierr = MatAXPY(A[0],1.0,A[1],DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr); 24 ierr = MatAXPY(A[0],-1.0,A[0],SAME_NONZERO_PATTERN);CHKERRQ(ierr); 25 ierr = MatNorm(A[0],NORM_1,&nrm);CHKERRQ(ierr); 26 if (nrm > tol) {ierr = PetscPrintf(PETSC_COMM_WORLD,"Error: MatNorm(), norm1=: %g\n",(double)nrm);CHKERRQ(ierr);} 27 28 /* Call MatSetRandom on assembled matrices */ 29 ierr = MatSetRandom(A[0],rctx);CHKERRQ(ierr); 30 ierr = MatSetRandom(A[1],rctx);CHKERRQ(ierr); 31 32 ierr = MatAXPY(A[0],1.0,A[1],DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr); 33 ierr = MatAXPY(A[0],-1.0,A[0],SAME_NONZERO_PATTERN);CHKERRQ(ierr); 34 ierr = MatNorm(A[0],NORM_1,&nrm);CHKERRQ(ierr); 35 if (nrm > tol) {ierr = PetscPrintf(PETSC_COMM_WORLD,"Error: MatNorm(), norm1=: %g\n",(double)nrm);CHKERRQ(ierr);} 36 37 ierr = MatDestroy(&A[0]);CHKERRQ(ierr); 38 ierr = MatDestroy(&A[1]);CHKERRQ(ierr); 39 ierr = PetscRandomDestroy(&rctx);CHKERRQ(ierr); 40 ierr = PetscFinalize(); 41 return ierr; 42 } 43 44 /*TEST 45 test: 46 nsize: 3 47 TEST*/ 48