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