1 static char help[] = "Tests MatTranspose()\n\n"; 2 3 #include <petscmat.h> 4 5 int main(int argc, char **args) 6 { 7 Mat C, A; 8 PetscScalar v; 9 PetscInt i, j, m = 4, n = 4, Ii, J, Istart, Iend; 10 PetscMPIInt rank, size; 11 PetscBool equal = PETSC_FALSE; 12 13 PetscFunctionBeginUser; 14 PetscCall(PetscInitialize(&argc, &args, (char *)0, help)); 15 PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank)); 16 PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size)); 17 18 PetscCall(PetscOptionsGetInt(NULL, NULL, "-m", &m, NULL)); 19 n = m; 20 21 PetscCall(MatCreateAIJ(PETSC_COMM_WORLD, PETSC_DECIDE, PETSC_DECIDE, m * n, m * n, 5, NULL, 5, NULL, &C)); 22 23 /* create the symmetric matrix for the five point stencil */ 24 PetscCall(MatGetOwnershipRange(C, &Istart, &Iend)); 25 for (Ii = Istart; Ii < Iend; Ii++) { 26 v = -1.0; 27 i = Ii / n; 28 j = Ii - i * n; 29 if (i > 0) { 30 J = Ii - n; 31 PetscCall(MatSetValues(C, 1, &Ii, 1, &J, &v, INSERT_VALUES)); 32 } 33 if (i < m - 1) { 34 J = Ii + n; 35 PetscCall(MatSetValues(C, 1, &Ii, 1, &J, &v, INSERT_VALUES)); 36 } 37 if (j > 0) { 38 J = Ii - 1; 39 PetscCall(MatSetValues(C, 1, &Ii, 1, &J, &v, INSERT_VALUES)); 40 } 41 if (j < n - 1) { 42 J = Ii + 1; 43 PetscCall(MatSetValues(C, 1, &Ii, 1, &J, &v, INSERT_VALUES)); 44 } 45 v = 4.0; 46 PetscCall(MatSetValues(C, 1, &Ii, 1, &Ii, &v, INSERT_VALUES)); 47 } 48 PetscCall(MatAssemblyBegin(C, MAT_FINAL_ASSEMBLY)); 49 PetscCall(MatAssemblyEnd(C, MAT_FINAL_ASSEMBLY)); 50 51 PetscCall(MatTranspose(C, MAT_INITIAL_MATRIX, &A)); 52 53 PetscCall(MatEqual(C, A, &equal)); 54 PetscCheck(equal, PETSC_COMM_SELF, PETSC_ERR_SUP, "C != C^T"); 55 56 PetscCall(MatDestroy(&C)); 57 PetscCall(MatDestroy(&A)); 58 PetscCall(PetscFinalize()); 59 return 0; 60 } 61 62 /*TEST 63 64 test: 65 66 TEST*/ 67