xref: /petsc/src/mat/tests/ex219f.F90 (revision 4820e4ea99a084ae862a8c395f732bc7c0e1a6d0)
1c4762a1bSJed Brownprogram newnonzero
285835d77SBarry 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
95d83a8b1SBarry Smith  PetscScalar :: v(1), value(1), values(2)
10c4762a1bSJed Brown  PetscErrorCode :: ierr
1185835d77SBarry Smith  IS :: is
1285835d77SBarry 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
195d83a8b1SBarry Smith  PetscCallA(MatCreateAIJ(PETSC_COMM_WORLD, PETSC_DECIDE, PETSC_DECIDE, n, m, one, PETSC_NULL_INTEGER_ARRAY, zero, PETSC_NULL_INTEGER_ARRAY, 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
36*4820e4eaSBarry Smith  if ((idxn(1) >= nl1) .and. (idxn(1) <= 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
43*4820e4eaSBarry Smith  if ((idxn(1) >= nl1) .and. (idxn(1) <= 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
4885835d77SBarry Smith  PetscCallA(ISCreateStride(PETSC_COMM_WORLD, nl2 - nl1, nl1, one, is, ierr))
4985835d77SBarry Smith  PetscCallA(ISLocalToGlobalMappingCreateIS(is, ismap, ierr))
5085835d77SBarry Smith  PetscCallA(MatSetLocalToGlobalMapping(A, ismap, ismap, ierr))
5185835d77SBarry Smith  PetscCallA(ISLocalToGlobalMappingDestroy(ismap, ierr))
5285835d77SBarry Smith  PetscCallA(ISDestroy(is, ierr))
535d83a8b1SBarry Smith  PetscCallA(MatGetValuesLocal(A, one, [zero], one, [zero], value, ierr))
545d83a8b1SBarry Smith  PetscCallA(MatGetValuesLocal(A, one, [zero], one, [zero], values, ierr))
5585835d77SBarry Smith  idxn(1) = 0
565d83a8b1SBarry Smith  PetscCallA(MatGetValuesLocal(A, one, idxn, one, [zero], values, ierr))
5785835d77SBarry Smith  PetscCallA(MatGetValuesLocal(A, one, idxn, one, idxn, values, ierr))
5885835d77SBarry Smith
59d8606c27SBarry Smith  PetscCallA(MatDestroy(A, ierr))
60d8606c27SBarry Smith  PetscCallA(PetscFinalize(ierr))
61c4762a1bSJed Brown
62c4762a1bSJed Brownend 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