1 2 static char help[] = "Tests MatTranspose() and MatEqual() for MPIAIJ matrices.\n\n"; 3 4 #include <petscmat.h> 5 6 int main(int argc,char **argv) 7 { 8 Mat A,B; 9 PetscInt m = 7,n,i,rstart,rend,cols[3]; 10 PetscErrorCode ierr; 11 PetscScalar v[3]; 12 PetscBool equal; 13 const char *eq[2]; 14 15 ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; 16 ierr = PetscOptionsGetInt(NULL,NULL,"-m",&m,NULL);CHKERRQ(ierr); 17 n = m; 18 19 /* ------- Assemble matrix, --------- */ 20 21 ierr = MatCreateAIJ(PETSC_COMM_WORLD,PETSC_DECIDE,PETSC_DECIDE,m,n,0,0,0,0,&A);CHKERRQ(ierr); 22 ierr = MatSetOption(A,MAT_NEW_NONZERO_LOCATION_ERR,PETSC_FALSE);CHKERRQ(ierr); 23 ierr = MatGetOwnershipRange(A,&rstart,&rend);CHKERRQ(ierr); 24 if (!rstart) { 25 cols[0] = 0; 26 cols[1] = 1; 27 v[0] = 2.0; v[1] = -1.0; 28 ierr = MatSetValues(A,1,&rstart,2,cols,v,INSERT_VALUES);CHKERRQ(ierr); 29 rstart++; 30 } 31 if (rend == m) { 32 rend--; 33 cols[0] = rend-1; 34 cols[1] = rend; 35 v[0] = -1.0; v[1] = 2.0; 36 ierr = MatSetValues(A,1,&rend,2,cols,v,INSERT_VALUES);CHKERRQ(ierr); 37 } 38 v[0] = -1.0; v[1] = 2.0; v[2] = -1.0; 39 for (i=rstart; i<rend; i++) { 40 cols[0] = i-1; 41 cols[1] = i; 42 cols[2] = i+1; 43 ierr = MatSetValues(A,1,&i,3,cols,v,INSERT_VALUES);CHKERRQ(ierr); 44 } 45 ierr = MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 46 ierr = MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 47 48 ierr = MatTranspose(A,MAT_INITIAL_MATRIX,&B);CHKERRQ(ierr); 49 50 ierr = MatEqual(A,B,&equal);CHKERRQ(ierr); 51 52 eq[0] = "not equal"; 53 eq[1] = "equal"; 54 ierr = PetscPrintf(PETSC_COMM_WORLD,"Matrices are %s\n",eq[equal]);CHKERRQ(ierr); 55 56 ierr = MatTranspose(A,MAT_REUSE_MATRIX,&B);CHKERRQ(ierr); 57 ierr = MatEqual(A,B,&equal);CHKERRQ(ierr); 58 if (!equal) { ierr = PetscPrintf(PETSC_COMM_WORLD,"MatTranspose with MAT_REUSE_MATRIX failed");CHKERRQ(ierr); } 59 60 /* Free data structures */ 61 ierr = MatDestroy(&A);CHKERRQ(ierr); 62 ierr = MatDestroy(&B);CHKERRQ(ierr); 63 64 ierr = PetscFinalize(); 65 return ierr; 66 } 67 68 /*TEST 69 70 test: 71 72 test: 73 suffix: 2 74 nsize: 2 75 output_file: output/ex58_1.out 76 77 TEST*/ 78