Actual source code: ex1f.F90
  1: !
  2: !  Tests VecScatterCreateToAll Fortran stub
  3:       program main
  4: #include <petsc/finclude/petscvec.h>
  5:       use petscvec
  6:       implicit none
  8:       PetscErrorCode ierr
  9:       PetscInt  nlocal, row, i1
 10:       PetscScalar num
 11:       PetscMPIInt rank
 12:       Vec v1, v2
 13:       VecScatter toall
 15:       PetscCallA(PetscInitialize(ierr))
 16:       PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD,rank,ierr))
 18:       nlocal = 1
 19:       i1 = 1
 20:       PetscCallA(VecCreateFromOptions(PETSC_COMM_WORLD,PETSC_NULL_CHARACTER,i1,nlocal,PETSC_DECIDE,v1,ierr))
 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))
 28:       PetscCallA(VecScatterCreateToAll(v1,toall,v2,ierr))
 30:       PetscCallA(VecScatterBegin(toall,v1,v2,INSERT_VALUES,SCATTER_FORWARD,ierr))
 31:       PetscCallA(VecScatterEnd(toall,v1,v2,INSERT_VALUES,SCATTER_FORWARD,ierr))
 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))
 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))
 41:       if (rank.eq.2) then
 42:          PetscCallA(PetscObjectSetName(v2, 'v2',ierr))
 43:          PetscCallA(VecView(v2,PETSC_VIEWER_STDOUT_SELF,ierr))
 44:       end if
 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))
 52:       PetscCallA(PetscFinalize(ierr))
 53:       end
 55: !/*TEST
 56: !
 57: !     test:
 58: !       nsize: 4
 59: !
 60: !TEST*/