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 */
main(int argc,char * argv[])9d71ae5a4SJacob Faibussowitsch int main(int argc, char *argv[])
10d71ae5a4SJacob Faibussowitsch {
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
21327415f7SBarry 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));
34*77433607SBarry Smith PetscCall(VecCreateFromOptions(PETSC_COMM_WORLD, NULL, 1, 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));
44*77433607SBarry Smith PetscCall(VecCreateFromOptions(PETSC_COMM_WORLD, NULL, 1, 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