xref: /petsc/src/mat/tests/ex160.c (revision d5b43468fb8780a8feea140ccd6fa3e6a50411cc)
1 
2 static char help[] = "Tests MatMPIBAIJ format in sequential run \n";
3 
4 #include <petscmat.h>
5 int main(int argc, char **args)
6 {
7   Mat         A, B;
8   PetscInt    i, rstart, rend;
9   PetscMPIInt rank, size;
10   PetscScalar v;
11 
12   PetscFunctionBeginUser;
13   PetscCall(PetscInitialize(&argc, &args, (char *)0, help));
14   PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
15   PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size));
16 
17   /* Create a MPIBAIJ matrix */
18   PetscCall(MatCreate(PETSC_COMM_WORLD, &A));
19   PetscCall(MatSetSizes(A, PETSC_DECIDE, PETSC_DECIDE, 32, 32));
20   PetscCall(MatSetType(A, MATMPIBAIJ));
21   PetscCall(MatSeqBAIJSetPreallocation(A, 2, 2, NULL));
22   PetscCall(MatMPIBAIJSetPreallocation(A, 2, 2, NULL, 2, NULL));
23 
24   v = 1.0;
25   PetscCall(MatGetOwnershipRange(A, &rstart, &rend));
26   for (i = rstart; i < rend; i++) PetscCall(MatSetValues(A, 1, &i, 1, &i, &v, INSERT_VALUES));
27   PetscCall(MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY));
28   PetscCall(MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY));
29 
30   /* Convert A to AIJ format */
31   PetscCall(MatConvert(A, MATAIJ, MAT_INITIAL_MATRIX, &B));
32 
33   PetscCall(MatDestroy(&A));
34   PetscCall(MatDestroy(&B));
35   PetscCall(PetscFinalize());
36   return 0;
37 }
38 
39 /*TEST
40 
41    test:
42      output_file: output/ex160.out
43 
44 TEST*/
45