xref: /petsc/src/vec/is/sf/tests/ex1f.F90 (revision 1fb7b255396822dd64a4ea9c656967637c985cf5)
1252985aeSJunchao Zhang!
2252985aeSJunchao Zhang!  Tests VecScatterCreateToAll Fortran stub
3252985aeSJunchao Zhang      program main
4252985aeSJunchao Zhang#include <petsc/finclude/petscvec.h>
5252985aeSJunchao Zhang      use petscvec
6252985aeSJunchao Zhang      implicit none
7252985aeSJunchao Zhang
8252985aeSJunchao Zhang      PetscErrorCode ierr
9252985aeSJunchao Zhang      PetscInt  nlocal, row
10252985aeSJunchao Zhang      PetscScalar num
11252985aeSJunchao Zhang      PetscMPIInt rank
12252985aeSJunchao Zhang      Vec v1, v2
13252985aeSJunchao Zhang      VecScatter toall
14252985aeSJunchao Zhang
15252985aeSJunchao Zhang      call PetscInitialize(PETSC_NULL_CHARACTER,ierr)
16252985aeSJunchao Zhang      if (ierr .ne. 0) then
17252985aeSJunchao Zhang        print*,'Unable to initialize PETSc'
18252985aeSJunchao Zhang        stop
19252985aeSJunchao Zhang      endif
20252985aeSJunchao Zhang      call MPI_Comm_rank(PETSC_COMM_WORLD,rank,ierr)
21252985aeSJunchao Zhang
22252985aeSJunchao Zhang      nlocal = 1
23252985aeSJunchao Zhang      call VecCreateMPI(PETSC_COMM_WORLD,nlocal,PETSC_DECIDE,v1,ierr)
24252985aeSJunchao Zhang
25252985aeSJunchao Zhang      row = rank
26252985aeSJunchao Zhang      num = rank
27252985aeSJunchao Zhang      call VecSetValue(v1,row,num,INSERT_VALUES,ierr)
28252985aeSJunchao Zhang      call VecAssemblyBegin(v1,ierr)
29252985aeSJunchao Zhang      call VecAssemblyEnd(v1,ierr)
30252985aeSJunchao Zhang
31252985aeSJunchao Zhang      call VecScatterCreateToAll(v1,toall,v2,ierr)
32252985aeSJunchao Zhang
33252985aeSJunchao Zhang      call VecScatterBegin(toall,v1,v2,INSERT_VALUES,SCATTER_FORWARD,ierr)
34252985aeSJunchao Zhang      call VecScatterEnd(toall,v1,v2,INSERT_VALUES,SCATTER_FORWARD,ierr)
35252985aeSJunchao Zhang
36*1fb7b255SJunchao Zhang      call VecScatterDestroy(toall,ierr)
37*1fb7b255SJunchao Zhang! Destroy v2 and then re-create it in VecScatterCreateToAll() to test if petsc can differentiate NULL projects with destroyed objects
38*1fb7b255SJunchao Zhang      call VecDestroy(v2,ierr)
39*1fb7b255SJunchao Zhang
40*1fb7b255SJunchao Zhang      call VecScatterCreateToAll(v1,toall,v2,ierr)
41*1fb7b255SJunchao Zhang      call VecScatterBegin(toall,v1,v2,INSERT_VALUES,SCATTER_FORWARD,ierr)
42*1fb7b255SJunchao Zhang      call VecScatterEnd(toall,v1,v2,INSERT_VALUES,SCATTER_FORWARD,ierr)
43*1fb7b255SJunchao Zhang
44252985aeSJunchao Zhang      if (rank.eq.2) then
45252985aeSJunchao Zhang         call PetscObjectSetName(v2, 'v2',ierr)
46252985aeSJunchao Zhang         call VecView(v2,PETSC_VIEWER_STDOUT_SELF,ierr)
47252985aeSJunchao Zhang      end if
48252985aeSJunchao Zhang
49252985aeSJunchao Zhang      call VecScatterDestroy(toall,ierr)
50252985aeSJunchao Zhang      call VecDestroy(v1,ierr)
51252985aeSJunchao Zhang      call VecDestroy(v2,ierr)
52*1fb7b255SJunchao Zhang! It is OK to destroy again
53*1fb7b255SJunchao Zhang      call VecDestroy(v2,ierr)
54252985aeSJunchao Zhang
55252985aeSJunchao Zhang      call PetscFinalize(ierr)
56252985aeSJunchao Zhang      end
57252985aeSJunchao Zhang
58252985aeSJunchao Zhang!/*TEST
59252985aeSJunchao Zhang!
60252985aeSJunchao Zhang!     test:
61252985aeSJunchao Zhang!       nsize: 4
62252985aeSJunchao Zhang!
63252985aeSJunchao Zhang!TEST*/
64