[petsc-users] DMDAGetElements returns unexpected values
Mikhail Artemyev
artemiev.mikhail at gmail.com
Wed Jul 15 10:46:46 CDT 2015
Dear all,
Here is a minimal working example that I'm testing:
#include "petscsys.h"
#include "petscdmda.h"
int main(int argc, char **argv)
{
PetscInitialize(&argc, &argv, 0, 0);
PetscInt rank;
MPI_Comm_rank(PETSC_COMM_WORLD, &rank);
DM da;
DMDACreate1d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, -9, 1, 0, NULL, &da);
PetscInt n_local_cells, n_cell_nodes;
const PetscInt *local_indices;
DMDAGetElements(da, &n_local_cells, &n_cell_nodes, &local_indices);
PetscSynchronizedPrintf(PETSC_COMM_WORLD,
"rank %d n_local_cells %d n_cell_nodes %d\n",
rank, n_local_cells, n_cell_nodes);
PetscSynchronizedFlush(PETSC_COMM_WORLD, PETSC_STDOUT);
DMDARestoreElements(da, &n_local_cells, &n_cell_nodes, &local_indices);
PetscFinalize();
return 0;
}
I believe it creates a 1D DM object, and outputs the number of local
cells assigned to each process.
Here is what I have as an output:
$ mpirun -np 1 ./test
rank 0 n_local_cells 8 n_cell_nodes 2 // OK
$ mpirun -np 2 ./test
rank 0 n_local_cells 4 n_cell_nodes 2 // OK
rank 1 n_local_cells 3 n_cell_nodes 2 // I expected 4 local cells here
$ mpirun -np 4 ./test
rank 0 n_local_cells 2 n_cell_nodes 2 // OK
rank 1 n_local_cells 1 n_cell_nodes 2 // I expected 2 local cells here
rank 2 n_local_cells 1 n_cell_nodes 2 // I expected 2 local cells here
rank 3 n_local_cells 1 n_cell_nodes 2 // I expected 2 local cells here
What am I missing?
Thank you.
Best,
Mikhail
More information about the petsc-users
mailing list