Hello all, You might have to forgive me if this is a silly question but I'm having some trouble understanding how LibMesh initializes MPI.
I have the code: using namespace std; namespace mpi = boost::mpi; int main(int argc, char **argv) { mpi::environment env(argc, argv); unique_ptr<mpi::communicator> worldComm = unique_ptr<mpi::communicator>(new mpi::communicator); auto libmeshInit = make_shared<libMesh::LibMeshInit>(argc, argv, MPI_Comm(*worldComm)); cout << " size: " << worldComm->size() << " rank: " << worldComm->rank() << endl; return 0; } which I expect to have an output like: size: 4 rank: 0 size: 4 rank: 1 size: 4 rank: 2 size: 4 rank: 3 However, I am instead seeing the output: size: 4 rank: 0 If I comment out the line auto libmeshInit = make_shared<libMesh::LibMeshInit>(argc, argv, MPI_Comm(*worldComm)); (i.e., I do not initalize LibMesh) then I get the output I expected. Is this behavior expected? or what I am doing wrong? The problem I am running into is that the mesh is distributed over all four processes but when I loop over the elements: // first element libMesh::MeshBase::const_element_iterator el = mesh.active_local_elements_begin(); // last element const libMesh::MeshBase::const_element_iterator elEnd = mesh.active_local_elements_end(); // loop through the elements for( ; el!=elEnd; ++el ) { /* DO SOME STUFF */ } I only "touch" the elements on the rank 0 process. Thanks for your help, Andy ------------------------------------------------------------------------------ _______________________________________________ Libmesh-users mailing list Libmesh-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libmesh-users