Actual source code: ex85f.F90

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

  9:   PetscErrorCode ierr
 10:   PetscInt, parameter :: one = 1, twelve = 12
 11:   Vec v
 12:   Mat m
 13:   PetscScalar, parameter :: value = 3.0

 15:   PetscCallA(PetscInitialize(ierr))

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

 22:   PetscCallA(MatSetValues(m, one, [4_PETSC_INT_KIND], one, [4_PETSC_INT_KIND], [value], INSERT_VALUES, ierr))
 23:   PetscCallA(MatAssemblyBegin(m, MAT_FINAL_ASSEMBLY, ierr))
 24:   PetscCallA(MatAssemblyEnd(m, MAT_FINAL_ASSEMBLY, ierr))

 26:   PetscCallA(VecCreateSeq(PETSC_COMM_SELF, twelve, v, ierr))
 27:   PetscCallA(MatGetDiagonal(m, v, ierr))
 28:   PetscCallA(VecView(v, PETSC_VIEWER_STDOUT_WORLD, ierr))

 30:   PetscCallA(MatDestroy(m, ierr))
 31:   PetscCallA(VecDestroy(v, ierr))
 32:   PetscCallA(PetscFinalize(ierr))
 33: end

 35: !/*TEST
 36: !
 37: !   test:
 38: !
 39: !TEST*/