Actual source code: ex85f.F90

  1: !
  2: !   This program tests MatGetDiagonal()
  3: !
  4: program main
  5: #include <petsc/finclude/petscmat.h>
  6:   use petscmat
  7:   implicit none

  9:   PetscErrorCode ierr
 10:   PetscInt i, one, twelve
 11:   Vec v
 12:   Mat m
 13:   PetscScalar value

 15:   PetscCallA(PetscInitialize(ierr))

 17:   twelve = 12
 18:   PetscCallA(MatCreate(PETSC_COMM_SELF, m, ierr))
 19:   PetscCallA(MatSetSizes(m, twelve, twelve, twelve, twelve, ierr))
 20:   PetscCallA(MatSetFromOptions(m, ierr))
 21:   PetscCallA(MatSetUp(m, ierr))

 23:   value = 3.0
 24:   i = 4
 25:   one = 1
 26:   PetscCallA(MatSetValues(m, one, [i], one, [i], [value], INSERT_VALUES, ierr))
 27:   PetscCallA(MatAssemblyBegin(m, MAT_FINAL_ASSEMBLY, ierr))
 28:   PetscCallA(MatAssemblyEnd(m, MAT_FINAL_ASSEMBLY, ierr))

 30:   PetscCallA(VecCreateSeq(PETSC_COMM_SELF, twelve, v, ierr))
 31:   PetscCallA(MatGetDiagonal(m, v, ierr))
 32:   PetscCallA(VecView(v, PETSC_VIEWER_STDOUT_WORLD, ierr))

 34:   PetscCallA(MatDestroy(m, ierr))
 35:   PetscCallA(VecDestroy(v, ierr))
 36:   PetscCallA(PetscFinalize(ierr))
 37: end

 39: !/*TEST
 40: !
 41: !   test:
 42: !
 43: !TEST*/