xref: /petsc/src/mat/tests/ex219f.F90 (revision 06946f3afd44871035458d6e99d4e4e6b2eaaa8d)
1program newnonzero
2#include <petsc/finclude/petscmat.h>
3 use petscmat
4 implicit none
5
6 Mat :: A
7 PetscInt :: n,m,idxm(1),idxn(1),nl1,nl2,zero,one,i
8 PetscScalar :: v(1)
9 PetscErrorCode :: ierr
10
11 call PetscInitialize(PETSC_NULL_CHARACTER,ierr)
12 zero = 0
13 one = 1
14 n=3
15 m=n
16 call MatCreateAIJ(PETSC_COMM_WORLD,PETSC_DECIDE,PETSC_DECIDE,n,m,one,PETSC_NULL_INTEGER,zero,PETSC_NULL_INTEGER,A,ierr)
17
18
19 call MatGetOwnershipRange(A,nl1,nl2,ierr)
20 do i=nl1,nl2-1
21   idxn(1)=i
22   idxm(1)=i
23   v(1)=1.0
24   call MatSetValues(A,one,idxn,one,idxm, v,INSERT_VALUES,ierr)
25 end do
26 call MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY,ierr)
27 call MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY,ierr)
28
29! Ignore any values set into new nonzero locations
30 call MatSetOption(A,MAT_NEW_NONZERO_LOCATIONS,PETSC_FALSE,ierr)
31
32 idxn(1)=0
33 idxm(1)=n-1
34 if ((idxn(1).ge.nl1).and.(idxn(1).le.nl2-1)) then
35   v(1)=2.0
36   call MatSetValues(A,one,idxn,one,idxm, v,INSERT_VALUES,ierr);CHKERRA(ierr)
37 end if
38 call MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY,ierr)
39 call MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY,ierr)
40
41 if ((idxn(1).ge.nl1).and.(idxn(1).le.nl2-1)) then
42   call MatGetValues(A,one,idxn,one,idxm, v,ierr)
43   write(6,*) PetscRealPart(v)
44 end if
45
46 call MatDestroy(A,ierr)
47 call PetscFinalize(ierr)
48
49 end program newnonzero
50
51!/*TEST
52!
53!     test:
54!       nsize: 2
55!       filter: Error:
56!
57!     test:
58!       requires: define(PETSC_USE_INFO)
59!       suffix: 2
60!       nsize: 2
61!       args: -info
62!       filter: grep "Skipping"
63!
64!TEST*/
65