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