xref: /petsc/src/mat/tests/ex219f.F90 (revision 85835d773d90c3a9d3e142b0936ecdca3fa60d34)
1c4762a1bSJed Brownprogram newnonzero
2*85835d77SBarry Smith#include <petsc/finclude/petscis.h>
3c4762a1bSJed Brown#include <petsc/finclude/petscmat.h>
4c4762a1bSJed Brown use petscmat
5c4762a1bSJed Brown implicit none
6c4762a1bSJed Brown
7c4762a1bSJed Brown Mat :: A
806946f3aSJose E. Roman PetscInt :: n,m,idxm(1),idxn(1),nl1,nl2,zero,one,i
9*85835d77SBarry Smith PetscScalar :: v(1),value,values(2)
10c4762a1bSJed Brown PetscErrorCode :: ierr
11*85835d77SBarry Smith IS :: is
12*85835d77SBarry Smith ISLocalToGlobalMapping :: ismap
13c4762a1bSJed Brown
14d8606c27SBarry Smith PetscCallA(PetscInitialize(ierr))
1506946f3aSJose E. Roman zero = 0
16c4762a1bSJed Brown one = 1
17c4762a1bSJed Brown n=3
18c4762a1bSJed Brown m=n
19d8606c27SBarry Smith PetscCallA(MatCreateAIJ(PETSC_COMM_WORLD,PETSC_DECIDE,PETSC_DECIDE,n,m,one,PETSC_NULL_INTEGER,zero,PETSC_NULL_INTEGER,A,ierr))
20c4762a1bSJed Brown
21d8606c27SBarry Smith PetscCallA(MatGetOwnershipRange(A,nl1,nl2,ierr))
22c4762a1bSJed Brown do i=nl1,nl2-1
23c4762a1bSJed Brown   idxn(1)=i
24c4762a1bSJed Brown   idxm(1)=i
25c4762a1bSJed Brown   v(1)=1.0
26d8606c27SBarry Smith   PetscCallA(MatSetValues(A,one,idxn,one,idxm, v,INSERT_VALUES,ierr))
27c4762a1bSJed Brown end do
28d8606c27SBarry Smith PetscCallA(MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY,ierr))
29d8606c27SBarry Smith PetscCallA(MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY,ierr))
30c4762a1bSJed Brown
31c4762a1bSJed Brown! Ignore any values set into new nonzero locations
32d8606c27SBarry Smith PetscCallA(MatSetOption(A,MAT_NEW_NONZERO_LOCATIONS,PETSC_FALSE,ierr))
33c4762a1bSJed Brown
34c4762a1bSJed Brown idxn(1)=0
35c4762a1bSJed Brown idxm(1)=n-1
36c4762a1bSJed Brown if ((idxn(1).ge.nl1).and.(idxn(1).le.nl2-1)) then
37c4762a1bSJed Brown   v(1)=2.0
38d8606c27SBarry Smith   PetscCallA(MatSetValues(A,one,idxn,one,idxm, v,INSERT_VALUES,ierr))
39c4762a1bSJed Brown end if
40d8606c27SBarry Smith PetscCallA(MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY,ierr))
41d8606c27SBarry Smith PetscCallA(MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY,ierr))
42c4762a1bSJed Brown
43c4762a1bSJed Brown if ((idxn(1).ge.nl1).and.(idxn(1).le.nl2-1)) then
44d8606c27SBarry Smith   PetscCallA(MatGetValues(A,one,idxn,one,idxm, v,ierr))
45c4762a1bSJed Brown   write(6,*) PetscRealPart(v)
46c4762a1bSJed Brown end if
47c4762a1bSJed Brown
48*85835d77SBarry Smith PetscCallA(ISCreateStride(PETSC_COMM_WORLD,nl2-nl1,nl1,one,is,ierr))
49*85835d77SBarry Smith PetscCallA(ISLocalToGlobalMappingCreateIS(is,ismap,ierr))
50*85835d77SBarry Smith PetscCallA(MatSetLocalToGlobalMapping(A,ismap,ismap,ierr))
51*85835d77SBarry Smith PetscCallA(ISLocalToGlobalMappingDestroy(ismap,ierr))
52*85835d77SBarry Smith PetscCallA(ISDestroy(is,ierr))
53*85835d77SBarry Smith PetscCallA(MatGetValuesLocal(A,one,zero,one,zero,value,ierr))
54*85835d77SBarry Smith PetscCallA(MatGetValuesLocal(A,one,zero,one,zero,values,ierr))
55*85835d77SBarry Smith idxn(1) = 0
56*85835d77SBarry Smith PetscCallA(MatGetValuesLocal(A,one,idxn,one,zero,values,ierr))
57*85835d77SBarry Smith PetscCallA(MatGetValuesLocal(A,one,idxn,one,idxn,values,ierr))
58*85835d77SBarry Smith
59d8606c27SBarry Smith PetscCallA(MatDestroy(A,ierr))
60d8606c27SBarry Smith PetscCallA(PetscFinalize(ierr))
61c4762a1bSJed Brown
62c4762a1bSJed Brown end program newnonzero
63c4762a1bSJed Brown
64c4762a1bSJed Brown!/*TEST
65c4762a1bSJed Brown!
66c4762a1bSJed Brown!     test:
67c4762a1bSJed Brown!       nsize: 2
68c4762a1bSJed Brown!       filter: Error:
69c4762a1bSJed Brown!
70c4762a1bSJed Brown!     test:
71dfd57a17SPierre Jolivet!       requires: defined(PETSC_USE_INFO)
72c4762a1bSJed Brown!       suffix: 2
73c4762a1bSJed Brown!       nsize: 2
74c4762a1bSJed Brown!       args: -info
75c4762a1bSJed Brown!       filter: grep "Skipping"
76c4762a1bSJed Brown!
77c4762a1bSJed Brown!TEST*/
78