1! 2! This program tests MatGetDiagonal() 3! 4program main 5#include <petsc/finclude/petscmat.h> 6 use petscmat 7 implicit none 8 9 PetscErrorCode ierr 10 PetscInt i, one, twelve 11 Vec v 12 Mat m 13 PetscScalar value 14 15 PetscCallA(PetscInitialize(ierr)) 16 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)) 22 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)) 29 30 PetscCallA(VecCreateSeq(PETSC_COMM_SELF, twelve, v, ierr)) 31 PetscCallA(MatGetDiagonal(m, v, ierr)) 32 PetscCallA(VecView(v, PETSC_VIEWER_STDOUT_WORLD, ierr)) 33 34 PetscCallA(MatDestroy(m, ierr)) 35 PetscCallA(VecDestroy(v, ierr)) 36 PetscCallA(PetscFinalize(ierr)) 37end 38 39!/*TEST 40! 41! test: 42! 43!TEST*/ 44