xref: /petsc/src/vec/is/sf/tests/ex1f.F90 (revision 66af8762ec03dbef0e079729eb2a1734a35ed7ff)
1!
2!  Tests VecScatterCreateToAll Fortran stub
3      program main
4#include <petsc/finclude/petscvec.h>
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.eq.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))
53      end
54
55!/*TEST
56!
57!     test:
58!       nsize: 4
59!
60!TEST*/
61