That fixed it! Thanks.  I knew it would be something silly like that.

On Fri, Aug 28, 2015 at 12:53 PM, Derek Gaston <fried...@gmail.com> wrote:

> Are you using std::cout to print a message out?
>
> libMesh (by default) eats all std::cout output on all processors other
> than processor zero.  You can use the command-line option of "--keep-cout"
> to keep that from happening... or you can print to std::err  (which is
> normally what I do in these cases).
>
> Derek
>
> On Fri, Aug 28, 2015 at 12:50 PM Andrew Donaldson Davis <davi...@mit.edu>
> wrote:
>
>> 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
>>
>
------------------------------------------------------------------------------
_______________________________________________
Libmesh-users mailing list
Libmesh-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to