Thank you very much, So, if I am using PetscSplitOwnership() and then MatGetOwnershipRange() to be prepared for preallocation, then MatSetSizes(A, local_size, local_size, N, N) should be called with the calculated local_size from PetscSplitOwnership() ?
Thanks, Massoud On Mon, Dec 12, 2016 at 12:35 AM, Jed Brown <[email protected]> wrote: > Massoud Rezavand <[email protected]> writes: > > > Dear PETSc team, > > > > What is the difference between the following two methods to get the local > > dimensions of a square matrix A? If they do the same, which one is > > recommended? Should I use MPI_Scan after both? > > I would typically use 1 because it's fewer calls and automatically uses > the correct communicator. You can use MatGetOwnershipRange() instead of > manually using MPI_Scan. > > > 1) > > > > PetscInt local_size = PETSC_DECIDE; > > > > MatSetSizes(A, local_size, local_size, N, N); > > > > > > 2) > > > > PetscInt local_size = PETSC_DECIDE; > > > > PetscSplitOwnership(PETSC_COMM_WORLD, &local_size, &N); > > > > MPI_Scan(&local_size, &end_row, 1, MPIU_INT, MPI_SUM, PETSC_COMM_WORLD); > > begin_row = end_row - local_size; > > > > > > Thanks in advance, > > Massoud >
