Actual source code: ex61.c


  2: static char help[] = "Tests MatSeq(B)AIJSetColumnIndices().\n\n";

  4: #include <petscmat.h>

  6: /*
  7:       Generate the following matrix:

  9:          1 0 3
 10:          1 2 3
 11:          0 0 3
 12: */
 13: int main(int argc, char **args)
 14: {
 15:   Mat         A;
 16:   PetscScalar v;
 17:   PetscInt    i, j, rowlens[] = {2, 3, 1}, cols[] = {0, 2, 0, 1, 2, 2};
 18:   PetscBool   flg;

 20:   PetscFunctionBeginUser;
 21:   PetscCall(PetscInitialize(&argc, &args, (char *)0, help));
 22:   PetscCall(PetscOptionsHasName(NULL, NULL, "-baij", &flg));
 23:   if (flg) {
 24:     PetscCall(MatCreateSeqBAIJ(PETSC_COMM_WORLD, 1, 3, 3, 0, rowlens, &A));
 25:     PetscCall(MatSeqBAIJSetColumnIndices(A, cols));
 26:   } else {
 27:     PetscCall(MatCreateSeqAIJ(PETSC_COMM_WORLD, 3, 3, 0, rowlens, &A));
 28:     PetscCall(MatSeqAIJSetColumnIndices(A, cols));
 29:   }

 31:   i = 0;
 32:   j = 0;
 33:   v = 1.0;
 34:   PetscCall(MatSetValues(A, 1, &i, 1, &j, &v, INSERT_VALUES));
 35:   i = 0;
 36:   j = 2;
 37:   v = 3.0;
 38:   PetscCall(MatSetValues(A, 1, &i, 1, &j, &v, INSERT_VALUES));

 40:   i = 1;
 41:   j = 0;
 42:   v = 1.0;
 43:   PetscCall(MatSetValues(A, 1, &i, 1, &j, &v, INSERT_VALUES));
 44:   i = 1;
 45:   j = 1;
 46:   v = 2.0;
 47:   PetscCall(MatSetValues(A, 1, &i, 1, &j, &v, INSERT_VALUES));
 48:   i = 1;
 49:   j = 2;
 50:   v = 3.0;
 51:   PetscCall(MatSetValues(A, 1, &i, 1, &j, &v, INSERT_VALUES));

 53:   i = 2;
 54:   j = 2;
 55:   v = 3.0;
 56:   PetscCall(MatSetValues(A, 1, &i, 1, &j, &v, INSERT_VALUES));

 58:   PetscCall(MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY));
 59:   PetscCall(MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY));
 60:   PetscCall(MatView(A, PETSC_VIEWER_STDOUT_WORLD));

 62:   PetscCall(MatDestroy(&A));
 63:   PetscCall(PetscFinalize());
 64:   return 0;
 65: }

 67: /*TEST

 69:    test:

 71:    test:
 72:       suffix: 2
 73:       args: -baij

 75: TEST*/