xref: /petsc/src/vec/is/sf/tests/ex21.c (revision 327415f76d85372a4417cf1aaa14db707d4d6c04)
154a24607SJunchao Zhang static const char help[] = "Test VecScatterCopy() on an SF with duplicated leaves \n\n";
254a24607SJunchao Zhang 
354a24607SJunchao Zhang #include <petscvec.h>
454a24607SJunchao Zhang #include <petscsf.h>
554a24607SJunchao Zhang 
654a24607SJunchao Zhang /*
754a24607SJunchao Zhang   Contributed-by: "Hammond, Glenn E" <glenn.hammond@pnnl.gov>
854a24607SJunchao Zhang */
954a24607SJunchao Zhang int main(int argc,char* argv[])
1054a24607SJunchao Zhang {
1154a24607SJunchao Zhang   PetscMPIInt size;
1254a24607SJunchao Zhang   PetscInt    n;
1354a24607SJunchao Zhang   PetscInt    *indices;
1454a24607SJunchao Zhang   Vec         vec;
1554a24607SJunchao Zhang   Vec         vec2;
1654a24607SJunchao Zhang   IS          is;
1754a24607SJunchao Zhang   IS          is2;
1854a24607SJunchao Zhang   VecScatter  scatter;
1954a24607SJunchao Zhang   VecScatter  scatter2;
2054a24607SJunchao Zhang 
21*327415f7SBarry Smith   PetscFunctionBeginUser;
2254a24607SJunchao Zhang   PetscCall(PetscInitialize(&argc,&argv,NULL,help));
2354a24607SJunchao Zhang   PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size));
2454a24607SJunchao Zhang   PetscCheck(size == 1,PETSC_COMM_WORLD,PETSC_ERR_WRONG_MPI_SIZE,"This example requires 1 process");
2554a24607SJunchao Zhang 
2654a24607SJunchao Zhang   n = 4;
2754a24607SJunchao Zhang   PetscCall(PetscMalloc1(n,&indices));
2854a24607SJunchao Zhang   indices[0] = 0;
2954a24607SJunchao Zhang   indices[1] = 1;
3054a24607SJunchao Zhang   indices[2] = 2;
3154a24607SJunchao Zhang   indices[3] = 3;
3254a24607SJunchao Zhang   PetscCall(ISCreateGeneral(PETSC_COMM_WORLD,n,indices,PETSC_COPY_VALUES,&is));
3354a24607SJunchao Zhang   PetscCall(PetscFree(indices));
3454a24607SJunchao Zhang   PetscCall(VecCreateMPI(PETSC_COMM_WORLD,n,n,&vec));
3554a24607SJunchao Zhang 
3654a24607SJunchao Zhang   n = 4;
3754a24607SJunchao Zhang   PetscCall(PetscMalloc1(n,&indices));
3854a24607SJunchao Zhang   indices[0] = 0;
3954a24607SJunchao Zhang   indices[1] = 0;
4054a24607SJunchao Zhang   indices[2] = 1;
4154a24607SJunchao Zhang   indices[3] = 1;
4254a24607SJunchao Zhang   PetscCall(ISCreateGeneral(PETSC_COMM_WORLD,n,indices,PETSC_COPY_VALUES,&is2));
4354a24607SJunchao Zhang   PetscCall(PetscFree(indices));
4454a24607SJunchao Zhang   PetscCall(VecCreateMPI(PETSC_COMM_WORLD,n/2,n/2,&vec2));
4554a24607SJunchao Zhang 
4654a24607SJunchao Zhang   PetscCall(VecScatterCreate(vec,is,vec2,is2,&scatter));
4754a24607SJunchao Zhang   PetscCall(ISDestroy(&is));
4854a24607SJunchao Zhang   PetscCall(ISDestroy(&is2));
4954a24607SJunchao Zhang 
5054a24607SJunchao Zhang   PetscCall(VecScatterCopy(scatter,&scatter2));
5154a24607SJunchao Zhang 
5254a24607SJunchao Zhang   PetscCall(VecDestroy(&vec));
5354a24607SJunchao Zhang   PetscCall(VecDestroy(&vec2));
5454a24607SJunchao Zhang   PetscCall(VecScatterDestroy(&scatter));
5554a24607SJunchao Zhang   PetscCall(VecScatterDestroy(&scatter2));
5654a24607SJunchao Zhang   PetscCall(PetscFinalize());
5754a24607SJunchao Zhang }
5854a24607SJunchao Zhang 
5954a24607SJunchao Zhang /*TEST
6054a24607SJunchao Zhang   test:
6154a24607SJunchao Zhang     nsize: 1
6254a24607SJunchao Zhang     output_file: output/empty.out
6354a24607SJunchao Zhang TEST*/
64