1252985aeSJunchao Zhang! 2252985aeSJunchao Zhang! Tests VecScatterCreateToAll Fortran stub 3252985aeSJunchao Zhang#include <petsc/finclude/petscvec.h> 4*c5e229c2SMartin Diehlprogram main 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)) 34f0b74427SPierre 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 414820e4eaSBarry Smith if (rank == 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 Zhangend 54252985aeSJunchao Zhang 55252985aeSJunchao Zhang!/*TEST 56252985aeSJunchao Zhang! 57252985aeSJunchao Zhang! test: 58252985aeSJunchao Zhang! nsize: 4 59252985aeSJunchao Zhang! 60252985aeSJunchao Zhang!TEST*/ 61