thanks Roy for the quick turnaround.

my comments below to your reply…

> On 13 Mar 2018, at 21:02, Roy Stogner <royst...@ices.utexas.edu> wrote:
> 
> 
> On Tue, 13 Mar 2018, Vasileios Vavourakis wrote:
> 
>> I would like to run (in parallel mode) a piece of libMesh code where on
>> each processor, a libMesh::Mesh is initialised & stored locally and, hence,
>> subsequently initialise the EquationSystems accordingly, and for each
>> processor independently.
>> 
>> The FE mesh, may be same for all processors, or different, but in principle
>> the information need to be stored independently (and partitioned in one
>> subdomain/partition) without any problems when running things in parallel.
>> 
>> I have tried to enforce the partitioning of the mesh via, e.g.:
>> 
>>   LibMeshInit init(argc, argv);
>>   Mesh msh(init.comm(), 1);
>>   //...import the mesh...
>>   msh.prepare_for_use();
>>   msh.partition(1);
>>   //
>>   EquationSystems es(msh);
>>   // ...add a system here...
>>   es.init();
>>   // ...solve the system, etc...
>> 
>> However, I noticed that should I run the code in that many processes as
>> many as the number of elements of the mesh, then it is ok; else it freezes
>> (especially at a point where I "update_global_solution".
>> Does this make sense to you?
> 
> Yes, I'm afraid so.  Although you might have told the mesh to give
> every element to processor 0, when you created the mesh with
> init.comm(), you made every processor on that communicator (i.e. every
> processor in this case, since init defaults to MPI_COMM_WORLD) an
> owner of that mesh.  When you do collective operations on a mesh, even
> processors who don't own any elements on the mesh must be involved if
> they're part of that mesh's communicator.

oh, I thought that the default setting in the Parallel::Communicator (i.e. see 
default constructor: 
http://libmesh.github.io/doxygen/classlibMesh_1_1Parallel_1_1Communicator.html#a697f8e599333609a45761828e14659c1
 
<http://libmesh.github.io/doxygen/classlibMesh_1_1Parallel_1_1Communicator.html#a697f8e599333609a45761828e14659c1>)
 for the “communicator” is: MPI_COMM_SELF

unless it gets initialised to MPI_COMM_WORLD somewhere in the LibMeshInit - 
apologies, i’m not always successful looking for some details in the library 
documentation :(


> 
>> Any suggestions / tips?
>> 
>> I am afraid there might be an easy way to do it, however, I wanted to have
>> your opinion about it.
> 
> I *think* the thing to do would be to create a new Parallel::Communicator
> wrapper around MPI_COMM_SELF, then use that to create a local Mesh.

done; will create a separate Communicator object, e.g.:
LibMeshInit init(argc, argv);
Communicator lcomm(MPI_COMM_SELF);
Mesh msh(lcomm, 1);
//...import the mesh...
msh.prepare_for_use();
//
EquationSystems es(msh);
// ...add a system here...
es.init();
// ...solve the system, etc...

I will give it a spin and update libmesh-users asap...

cheers,
Vasileios


> 
> I've never done that before, though.  If you do it and it works, we'd
> love to have a unit test to make sure it *stays* working through
> future library updates.  If you do it and it doesn't work, let us know
> and (especially if you can set up a failing test case) I'll try to
> help figure out what's wrong.
> ---
> Roy

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Libmesh-users mailing list
Libmesh-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to