xref: /petsc/src/vec/is/sf/tests/ex1f.F90 (revision d8606c274c09e255c003062beb17b1be973467bc)
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
15*d8606c27SBarry Smith      PetscCallA(PetscInitialize(ierr))
16*d8606c27SBarry Smith      PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD,rank,ierr))
17252985aeSJunchao Zhang
18252985aeSJunchao Zhang      nlocal = 1
19*d8606c27SBarry Smith      PetscCallA(VecCreateMPI(PETSC_COMM_WORLD,nlocal,PETSC_DECIDE,v1,ierr))
20252985aeSJunchao Zhang
21252985aeSJunchao Zhang      row = rank
22252985aeSJunchao Zhang      num = rank
23*d8606c27SBarry Smith      PetscCallA(VecSetValue(v1,row,num,INSERT_VALUES,ierr))
24*d8606c27SBarry Smith      PetscCallA(VecAssemblyBegin(v1,ierr))
25*d8606c27SBarry Smith      PetscCallA(VecAssemblyEnd(v1,ierr))
26252985aeSJunchao Zhang
27*d8606c27SBarry Smith      PetscCallA(VecScatterCreateToAll(v1,toall,v2,ierr))
28252985aeSJunchao Zhang
29*d8606c27SBarry Smith      PetscCallA(VecScatterBegin(toall,v1,v2,INSERT_VALUES,SCATTER_FORWARD,ierr))
30*d8606c27SBarry Smith      PetscCallA(VecScatterEnd(toall,v1,v2,INSERT_VALUES,SCATTER_FORWARD,ierr))
31252985aeSJunchao Zhang
32*d8606c27SBarry Smith      PetscCallA(VecScatterDestroy(toall,ierr))
331fb7b255SJunchao Zhang! Destroy v2 and then re-create it in VecScatterCreateToAll() to test if petsc can differentiate NULL projects with destroyed objects
34*d8606c27SBarry Smith      PetscCallA(VecDestroy(v2,ierr))
351fb7b255SJunchao Zhang
36*d8606c27SBarry Smith      PetscCallA(VecScatterCreateToAll(v1,toall,v2,ierr))
37*d8606c27SBarry Smith      PetscCallA(VecScatterBegin(toall,v1,v2,INSERT_VALUES,SCATTER_FORWARD,ierr))
38*d8606c27SBarry Smith      PetscCallA(VecScatterEnd(toall,v1,v2,INSERT_VALUES,SCATTER_FORWARD,ierr))
391fb7b255SJunchao Zhang
40252985aeSJunchao Zhang      if (rank.eq.2) then
41*d8606c27SBarry Smith         PetscCallA(PetscObjectSetName(v2, 'v2',ierr))
42*d8606c27SBarry Smith         PetscCallA(VecView(v2,PETSC_VIEWER_STDOUT_SELF,ierr))
43252985aeSJunchao Zhang      end if
44252985aeSJunchao Zhang
45*d8606c27SBarry Smith      PetscCallA(VecScatterDestroy(toall,ierr))
46*d8606c27SBarry Smith      PetscCallA(VecDestroy(v1,ierr))
47*d8606c27SBarry Smith      PetscCallA(VecDestroy(v2,ierr))
481fb7b255SJunchao Zhang! It is OK to destroy again
49*d8606c27SBarry Smith      PetscCallA(VecDestroy(v2,ierr))
50252985aeSJunchao Zhang
51*d8606c27SBarry Smith      PetscCallA(PetscFinalize(ierr))
52252985aeSJunchao Zhang      end
53252985aeSJunchao Zhang
54252985aeSJunchao Zhang!/*TEST
55252985aeSJunchao Zhang!
56252985aeSJunchao Zhang!     test:
57252985aeSJunchao Zhang!       nsize: 4
58252985aeSJunchao Zhang!
59252985aeSJunchao Zhang!TEST*/
60