1 static char help[] = "Tests MatShift for SeqAIJ matrices with some missing diagonal entries\n\n"; 2 3 #include <petscmat.h> 4 5 int main(int argc, char **argv) { 6 Mat A; 7 PetscInt coli[4], row; 8 PetscScalar vali[4]; 9 PetscMPIInt size; 10 11 PetscFunctionBeginUser; 12 PetscCall(PetscInitialize(&argc, &argv, (char *)0, help)); 13 PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size)); 14 PetscCheck(size == 1, PETSC_COMM_WORLD, PETSC_ERR_WRONG_MPI_SIZE, "This is a uniprocessor example only!"); 15 16 PetscCall(MatCreate(PETSC_COMM_SELF, &A)); 17 PetscCall(MatSetSizes(A, 4, 4, 4, 4)); 18 PetscCall(MatSetType(A, MATSEQAIJ)); 19 PetscCall(MatSeqAIJSetPreallocation(A, 4, NULL)); 20 21 row = 0; 22 coli[0] = 1; 23 coli[1] = 3; 24 vali[0] = 1.0; 25 vali[1] = 2.0; 26 PetscCall(MatSetValues(A, 1, &row, 2, coli, vali, ADD_VALUES)); 27 28 row = 1; 29 coli[0] = 0; 30 coli[1] = 1; 31 coli[2] = 2; 32 coli[3] = 3; 33 vali[0] = 3.0; 34 vali[1] = 4.0; 35 vali[2] = 5.0; 36 vali[3] = 6.0; 37 PetscCall(MatSetValues(A, 1, &row, 4, coli, vali, ADD_VALUES)); 38 39 row = 2; 40 coli[0] = 0; 41 coli[1] = 3; 42 vali[0] = 7.0; 43 vali[1] = 8.0; 44 PetscCall(MatSetValues(A, 1, &row, 2, coli, vali, ADD_VALUES)); 45 46 PetscCall(MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY)); 47 PetscCall(MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY)); 48 PetscCall(MatView(A, PETSC_VIEWER_STDOUT_WORLD)); 49 50 PetscCall(MatShift(A, 0.0)); 51 PetscCall(MatView(A, PETSC_VIEWER_STDOUT_WORLD)); 52 53 PetscCall(MatDestroy(&A)); 54 PetscCall(PetscFinalize()); 55 return 0; 56 } 57 58 /*TEST 59 60 test: 61 62 TEST*/ 63