xref: /petsc/src/mat/tests/ex85f.F90 (revision 9b88ac225e01f016352a5f4cd90e158abe5f5675)
1d8606c27SBarry Smith!
2d8606c27SBarry Smith!   This program tests MatGetDiagonal()
3d8606c27SBarry Smith!
4d8606c27SBarry Smith#include <petsc/finclude/petscmat.h>
5*c5e229c2SMartin Diehlprogram main
6d8606c27SBarry Smith  use petscmat
7d8606c27SBarry Smith  implicit none
8d8606c27SBarry Smith
9d8606c27SBarry Smith  PetscErrorCode ierr
10d8606c27SBarry Smith  PetscInt i, one, twelve
11d8606c27SBarry Smith  Vec v
12d8606c27SBarry Smith  Mat m
13d8606c27SBarry Smith  PetscScalar value
14d8606c27SBarry Smith
15d8606c27SBarry Smith  PetscCallA(PetscInitialize(ierr))
16d8606c27SBarry Smith
17d8606c27SBarry Smith  twelve = 12
18d8606c27SBarry Smith  PetscCallA(MatCreate(PETSC_COMM_SELF, m, ierr))
19d8606c27SBarry Smith  PetscCallA(MatSetSizes(m, twelve, twelve, twelve, twelve, ierr))
20d8606c27SBarry Smith  PetscCallA(MatSetFromOptions(m, ierr))
21d8606c27SBarry Smith  PetscCallA(MatSetUp(m, ierr))
22d8606c27SBarry Smith
23d8606c27SBarry Smith  value = 3.0
24d8606c27SBarry Smith  i = 4
25d8606c27SBarry Smith  one = 1
265d83a8b1SBarry Smith  PetscCallA(MatSetValues(m, one, [i], one, [i], [value], INSERT_VALUES, ierr))
27d8606c27SBarry Smith  PetscCallA(MatAssemblyBegin(m, MAT_FINAL_ASSEMBLY, ierr))
28d8606c27SBarry Smith  PetscCallA(MatAssemblyEnd(m, MAT_FINAL_ASSEMBLY, ierr))
29d8606c27SBarry Smith
30d8606c27SBarry Smith  PetscCallA(VecCreateSeq(PETSC_COMM_SELF, twelve, v, ierr))
31d8606c27SBarry Smith  PetscCallA(MatGetDiagonal(m, v, ierr))
32d8606c27SBarry Smith  PetscCallA(VecView(v, PETSC_VIEWER_STDOUT_WORLD, ierr))
33d8606c27SBarry Smith
34d8606c27SBarry Smith  PetscCallA(MatDestroy(m, ierr))
35d8606c27SBarry Smith  PetscCallA(VecDestroy(v, ierr))
36d8606c27SBarry Smith  PetscCallA(PetscFinalize(ierr))
37d8606c27SBarry Smithend
38d8606c27SBarry Smith
39d8606c27SBarry Smith!/*TEST
40d8606c27SBarry Smith!
41d8606c27SBarry Smith!   test:
42d8606c27SBarry Smith!
43d8606c27SBarry Smith!TEST*/
44