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*/