xref: /petsc/src/vec/is/sf/tests/ex1f.F90 (revision 9b88ac225e01f016352a5f4cd90e158abe5f5675)
1!
2!  Tests VecScatterCreateToAll Fortran stub
3#include <petsc/finclude/petscvec.h>
4program main
5  use petscvec
6  implicit none
7
8  PetscErrorCode ierr
9  PetscInt nlocal, row, i1
10  PetscScalar num
11  PetscMPIInt rank
12  Vec v1, v2
13  VecScatter toall
14
15  PetscCallA(PetscInitialize(ierr))
16  PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD, rank, ierr))
17
18  nlocal = 1
19  i1 = 1
20  PetscCallA(VecCreateFromOptions(PETSC_COMM_WORLD, PETSC_NULL_CHARACTER, i1, nlocal, PETSC_DECIDE, v1, ierr))
21
22  row = rank
23  num = rank
24  PetscCallA(VecSetValue(v1, row, num, INSERT_VALUES, ierr))
25  PetscCallA(VecAssemblyBegin(v1, ierr))
26  PetscCallA(VecAssemblyEnd(v1, ierr))
27
28  PetscCallA(VecScatterCreateToAll(v1, toall, v2, ierr))
29
30  PetscCallA(VecScatterBegin(toall, v1, v2, INSERT_VALUES, SCATTER_FORWARD, ierr))
31  PetscCallA(VecScatterEnd(toall, v1, v2, INSERT_VALUES, SCATTER_FORWARD, ierr))
32
33  PetscCallA(VecScatterDestroy(toall, ierr))
34! Destroy v2 and then re-create it in VecScatterCreateToAll() to test if PETSc can differentiate NULL projects with destroyed objects
35  PetscCallA(VecDestroy(v2, ierr))
36
37  PetscCallA(VecScatterCreateToAll(v1, toall, v2, ierr))
38  PetscCallA(VecScatterBegin(toall, v1, v2, INSERT_VALUES, SCATTER_FORWARD, ierr))
39  PetscCallA(VecScatterEnd(toall, v1, v2, INSERT_VALUES, SCATTER_FORWARD, ierr))
40
41  if (rank == 2) then
42    PetscCallA(PetscObjectSetName(v2, 'v2', ierr))
43    PetscCallA(VecView(v2, PETSC_VIEWER_STDOUT_SELF, ierr))
44  end if
45
46  PetscCallA(VecScatterDestroy(toall, ierr))
47  PetscCallA(VecDestroy(v1, ierr))
48  PetscCallA(VecDestroy(v2, ierr))
49! It is OK to destroy again
50  PetscCallA(VecDestroy(v2, ierr))
51
52  PetscCallA(PetscFinalize(ierr))
53end
54
55!/*TEST
56!
57!     test:
58!       nsize: 4
59!
60!TEST*/
61