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