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