static char help[] = "Load data into subvector.\n\n"; #include #include int main(int argc,char **argv) { Vec testvec, loadvec; IS loadis; PetscMPIInt size,rank; PetscInt low,high; PetscInt issize, isstart; PetscInt skipuntil = 50; PetscViewer hdf5_viewer; PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscInitialize(&argc, &argv, (char*) 0, help);if (ierr) return ierr; ierr = MPI_Comm_size(PETSC_COMM_WORLD, &size);CHKERRQ(ierr); ierr = MPI_Comm_rank(PETSC_COMM_WORLD, &rank);CHKERRQ(ierr); ierr = VecCreate(PETSC_COMM_WORLD, &testvec);CHKERRQ(ierr); ierr = VecSetSizes(testvec, PETSC_DECIDE,100);CHKERRQ(ierr); ierr = VecSetUp(testvec);CHKERRQ(ierr); ierr = VecSet(testvec, (PetscScalar) 1);CHKERRQ(ierr); ierr = VecGetOwnershipRange(testvec, &low, &high);CHKERRQ(ierr); if( low>=skipuntil ) { isstart = low; issize = high - low; } else if( low<=skipuntil && high>=skipuntil ) { isstart = skipuntil; issize = high - skipuntil; } else { isstart = low; issize = 0; } ierr = ISCreateStride(PETSC_COMM_WORLD, issize, isstart, 1, &loadis);CHKERRQ(ierr); PetscPrintf(PETSC_COMM_SELF,"Vec-Ownership : %d to %d, index set size & start : %d : %d \n", low, high, issize, isstart); ierr = VecGetSubVector(testvec, loadis, &loadvec);CHKERRQ(ierr); ierr = PetscObjectSetName((PetscObject)loadvec,"test"); CHKERRQ(ierr); ierr = PetscViewerHDF5Open(PETSC_COMM_WORLD,"testinput.h5", FILE_MODE_READ,&hdf5_viewer); CHKERRQ(ierr); ierr = VecLoad(loadvec, hdf5_viewer);CHKERRQ(ierr); ierr = PetscViewerHDF5Open(PETSC_COMM_WORLD,"testsubload.h5", FILE_MODE_WRITE,&hdf5_viewer);CHKERRQ(ierr); ierr = VecView(loadvec,hdf5_viewer);CHKERRQ(ierr); ierr = PetscViewerDestroy(&hdf5_viewer);CHKERRQ(ierr); ierr = VecRestoreSubVector(testvec, loadis, &loadvec);CHKERRQ(ierr); ierr = VecDestroy(&loadvec); CHKERRQ(ierr); ierr = PetscObjectSetName((PetscObject)testvec,"testvec"); CHKERRQ(ierr); ierr = PetscViewerHDF5Open(PETSC_COMM_WORLD,"testload.h5", FILE_MODE_WRITE,&hdf5_viewer);CHKERRQ(ierr); ierr = VecView(testvec,hdf5_viewer);CHKERRQ(ierr); ierr = PetscViewerDestroy(&hdf5_viewer);CHKERRQ(ierr); ierr = VecDestroy(&testvec); CHKERRQ(ierr); ierr = PetscFinalize(); return ierr; }