xref: /petsc/src/mat/tests/ex219f.F90 (revision 9b88ac225e01f016352a5f4cd90e158abe5f5675)
1c4762a1bSJed Brown#include <petsc/finclude/petscmat.h>
2*c5e229c2SMartin Diehlprogram newnonzero
3c4762a1bSJed Brown  use petscmat
4c4762a1bSJed Brown  implicit none
5c4762a1bSJed Brown
6c4762a1bSJed Brown  Mat :: A
706946f3aSJose E. Roman  PetscInt :: n, m, idxm(1), idxn(1), nl1, nl2, zero, one, i
85d83a8b1SBarry Smith  PetscScalar :: v(1), value(1), values(2)
9c4762a1bSJed Brown  PetscErrorCode :: ierr
1085835d77SBarry Smith  IS :: is
1185835d77SBarry Smith  ISLocalToGlobalMapping :: ismap
12c4762a1bSJed Brown
13d8606c27SBarry Smith  PetscCallA(PetscInitialize(ierr))
1406946f3aSJose E. Roman  zero = 0
15c4762a1bSJed Brown  one = 1
16c4762a1bSJed Brown  n = 3
17c4762a1bSJed Brown  m = n
185d83a8b1SBarry Smith  PetscCallA(MatCreateAIJ(PETSC_COMM_WORLD, PETSC_DECIDE, PETSC_DECIDE, n, m, one, PETSC_NULL_INTEGER_ARRAY, zero, PETSC_NULL_INTEGER_ARRAY, A, ierr))
19c4762a1bSJed Brown
20d8606c27SBarry Smith  PetscCallA(MatGetOwnershipRange(A, nl1, nl2, ierr))
21c4762a1bSJed Brown  do i = nl1, nl2 - 1
22c4762a1bSJed Brown    idxn(1) = i
23c4762a1bSJed Brown    idxm(1) = i
24c4762a1bSJed Brown    v(1) = 1.0
25d8606c27SBarry Smith    PetscCallA(MatSetValues(A, one, idxn, one, idxm, v, INSERT_VALUES, ierr))
26c4762a1bSJed Brown  end do
27d8606c27SBarry Smith  PetscCallA(MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY, ierr))
28d8606c27SBarry Smith  PetscCallA(MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY, ierr))
29c4762a1bSJed Brown
30c4762a1bSJed Brown! Ignore any values set into new nonzero locations
31d8606c27SBarry Smith  PetscCallA(MatSetOption(A, MAT_NEW_NONZERO_LOCATIONS, PETSC_FALSE, ierr))
32c4762a1bSJed Brown
33c4762a1bSJed Brown  idxn(1) = 0
34c4762a1bSJed Brown  idxm(1) = n - 1
354820e4eaSBarry Smith  if ((idxn(1) >= nl1) .and. (idxn(1) <= nl2 - 1)) then
36c4762a1bSJed Brown    v(1) = 2.0
37d8606c27SBarry Smith    PetscCallA(MatSetValues(A, one, idxn, one, idxm, v, INSERT_VALUES, ierr))
38c4762a1bSJed Brown  end if
39d8606c27SBarry Smith  PetscCallA(MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY, ierr))
40d8606c27SBarry Smith  PetscCallA(MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY, ierr))
41c4762a1bSJed Brown
424820e4eaSBarry Smith  if ((idxn(1) >= nl1) .and. (idxn(1) <= nl2 - 1)) then
43d8606c27SBarry Smith    PetscCallA(MatGetValues(A, one, idxn, one, idxm, v, ierr))
44c4762a1bSJed Brown    write (6, *) PetscRealPart(v)
45c4762a1bSJed Brown  end if
46c4762a1bSJed Brown
4785835d77SBarry Smith  PetscCallA(ISCreateStride(PETSC_COMM_WORLD, nl2 - nl1, nl1, one, is, ierr))
4885835d77SBarry Smith  PetscCallA(ISLocalToGlobalMappingCreateIS(is, ismap, ierr))
4985835d77SBarry Smith  PetscCallA(MatSetLocalToGlobalMapping(A, ismap, ismap, ierr))
5085835d77SBarry Smith  PetscCallA(ISLocalToGlobalMappingDestroy(ismap, ierr))
5185835d77SBarry Smith  PetscCallA(ISDestroy(is, ierr))
525d83a8b1SBarry Smith  PetscCallA(MatGetValuesLocal(A, one, [zero], one, [zero], value, ierr))
535d83a8b1SBarry Smith  PetscCallA(MatGetValuesLocal(A, one, [zero], one, [zero], values, ierr))
5485835d77SBarry Smith  idxn(1) = 0
555d83a8b1SBarry Smith  PetscCallA(MatGetValuesLocal(A, one, idxn, one, [zero], values, ierr))
5685835d77SBarry Smith  PetscCallA(MatGetValuesLocal(A, one, idxn, one, idxn, values, ierr))
5785835d77SBarry Smith
58d8606c27SBarry Smith  PetscCallA(MatDestroy(A, ierr))
59d8606c27SBarry Smith  PetscCallA(PetscFinalize(ierr))
60c4762a1bSJed Brown
61c4762a1bSJed Brownend program newnonzero
62c4762a1bSJed Brown
63c4762a1bSJed Brown!/*TEST
64c4762a1bSJed Brown!
65c4762a1bSJed Brown!     test:
66c4762a1bSJed Brown!       nsize: 2
67c4762a1bSJed Brown!       filter: Error:
68c4762a1bSJed Brown!
69c4762a1bSJed Brown!     test:
70dfd57a17SPierre Jolivet!       requires: defined(PETSC_USE_INFO)
71c4762a1bSJed Brown!       suffix: 2
72c4762a1bSJed Brown!       nsize: 2
73c4762a1bSJed Brown!       args: -info
74c4762a1bSJed Brown!       filter: grep "Skipping"
75c4762a1bSJed Brown!
76c4762a1bSJed Brown!TEST*/
77