xref: /petsc/src/vec/is/sf/tests/ex1f.F90 (revision f0b74427b291237450348b8514d67555ad08bce6)
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
977433607SBarry Smith      PetscInt  nlocal, row, i1
10252985aeSJunchao Zhang      PetscScalar num
11252985aeSJunchao Zhang      PetscMPIInt rank
12252985aeSJunchao Zhang      Vec v1, v2
13252985aeSJunchao Zhang      VecScatter toall
14252985aeSJunchao Zhang
15d8606c27SBarry Smith      PetscCallA(PetscInitialize(ierr))
16d8606c27SBarry Smith      PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD,rank,ierr))
17252985aeSJunchao Zhang
18252985aeSJunchao Zhang      nlocal = 1
1977433607SBarry Smith      i1 = 1
2077433607SBarry Smith      PetscCallA(VecCreateFromOptions(PETSC_COMM_WORLD,PETSC_NULL_CHARACTER,i1,nlocal,PETSC_DECIDE,v1,ierr))
21252985aeSJunchao Zhang
22252985aeSJunchao Zhang      row = rank
23252985aeSJunchao Zhang      num = rank
24d8606c27SBarry Smith      PetscCallA(VecSetValue(v1,row,num,INSERT_VALUES,ierr))
25d8606c27SBarry Smith      PetscCallA(VecAssemblyBegin(v1,ierr))
26d8606c27SBarry Smith      PetscCallA(VecAssemblyEnd(v1,ierr))
27252985aeSJunchao Zhang
28d8606c27SBarry Smith      PetscCallA(VecScatterCreateToAll(v1,toall,v2,ierr))
29252985aeSJunchao Zhang
30d8606c27SBarry Smith      PetscCallA(VecScatterBegin(toall,v1,v2,INSERT_VALUES,SCATTER_FORWARD,ierr))
31d8606c27SBarry Smith      PetscCallA(VecScatterEnd(toall,v1,v2,INSERT_VALUES,SCATTER_FORWARD,ierr))
32252985aeSJunchao Zhang
33d8606c27SBarry Smith      PetscCallA(VecScatterDestroy(toall,ierr))
34*f0b74427SPierre Jolivet! Destroy v2 and then re-create it in VecScatterCreateToAll() to test if PETSc can differentiate NULL projects with destroyed objects
35d8606c27SBarry Smith      PetscCallA(VecDestroy(v2,ierr))
361fb7b255SJunchao Zhang
37d8606c27SBarry Smith      PetscCallA(VecScatterCreateToAll(v1,toall,v2,ierr))
38d8606c27SBarry Smith      PetscCallA(VecScatterBegin(toall,v1,v2,INSERT_VALUES,SCATTER_FORWARD,ierr))
39d8606c27SBarry Smith      PetscCallA(VecScatterEnd(toall,v1,v2,INSERT_VALUES,SCATTER_FORWARD,ierr))
401fb7b255SJunchao Zhang
41252985aeSJunchao Zhang      if (rank.eq.2) then
42d8606c27SBarry Smith         PetscCallA(PetscObjectSetName(v2, 'v2',ierr))
43d8606c27SBarry Smith         PetscCallA(VecView(v2,PETSC_VIEWER_STDOUT_SELF,ierr))
44252985aeSJunchao Zhang      end if
45252985aeSJunchao Zhang
46d8606c27SBarry Smith      PetscCallA(VecScatterDestroy(toall,ierr))
47d8606c27SBarry Smith      PetscCallA(VecDestroy(v1,ierr))
48d8606c27SBarry Smith      PetscCallA(VecDestroy(v2,ierr))
491fb7b255SJunchao Zhang! It is OK to destroy again
50d8606c27SBarry Smith      PetscCallA(VecDestroy(v2,ierr))
51252985aeSJunchao Zhang
52d8606c27SBarry Smith      PetscCallA(PetscFinalize(ierr))
53252985aeSJunchao Zhang      end
54252985aeSJunchao Zhang
55252985aeSJunchao Zhang!/*TEST
56252985aeSJunchao Zhang!
57252985aeSJunchao Zhang!     test:
58252985aeSJunchao Zhang!       nsize: 4
59252985aeSJunchao Zhang!
60252985aeSJunchao Zhang!TEST*/
61