Question: Exchange part of mesh so that it is available to all processes
Dear list, I have got a question regarding a distributed mesh. Although I know this is necessarily inefficient, I would like to make a part of the mesh available to all processes, more precisely the boundary faces and vertices of my volume mesh. I do not know which function I am supposed to use or even if there is a function that does what I want. As far as I can see, send_/recv_ functions send a message from one process to another one, so these functions probably do not what I want. broadcast_entities might be the right thing, maybe something like broadcast_entities(mpi_rank, owned_boundary_entities) results in owned_boundary_entities containing *all* boundary entities? But on the other hand, according to the documentation all processes should know about the whole mesh, which is not the case for me. Apart from that I do not know what remote handles are. The other option would be exchange_owned_mesh(s), I think. Is exchange_procs simply a list of all processes involved and exchange_ents a list containing the local part of each process right after calling that function? What about remote handles? Am I supposed to use exchange_owned_mesh or exchange_owned_meshs? In either case: Can I exchange tags using the exchange_tags functions afterwards? Maybe someone can help me? Thanks! Best regards, Markus Mayr
I think "exchange_owned_meshs" is the right one for you. You should give a pair of processor and entity information with "exchange_procs" and "exchange_ents" to the function. If you want to exchange mesh entities(entity 1~10) from p0 to p1 and mesh entities(5~17) from p2 to p0, you can make the argument list as follows. p0 : exchange_procs(1), exchange_ents(1~10) p2 : exchange_procs(0), exchange_ents(5~17) To exchange remote handle information, you can turn on "store_remote_handles" option. In addition, tag information is automatically exchanged by the function. Thanks. ----------------------------- Hong-Jun Kim Post-doc researcher MCS, Argonne National Laboratory 9700 S. Cass Ave. B240/R2147 Argonne, IL 60439 630-252-4791 [email protected] ----------------------------- ----- Original Message -----
From: "Markus Mayr" <[email protected]> To: [email protected] Sent: Monday, November 28, 2011 9:06:17 AM Subject: [MOAB-dev] Question: Exchange part of mesh so that it is available to all processes Dear list,
I have got a question regarding a distributed mesh.
Although I know this is necessarily inefficient, I would like to make a part of the mesh available to all processes, more precisely the boundary faces and vertices of my volume mesh.
I do not know which function I am supposed to use or even if there is a function that does what I want. As far as I can see, send_/recv_ functions send a message from one process to another one, so these functions probably do not what I want.
broadcast_entities might be the right thing, maybe something like broadcast_entities(mpi_rank, owned_boundary_entities) results in owned_boundary_entities containing *all* boundary entities? But on the other hand, according to the documentation all processes should know about the whole mesh, which is not the case for me. Apart from that I do not know what remote handles are.
The other option would be exchange_owned_mesh(s), I think. Is exchange_procs simply a list of all processes involved and exchange_ents a list containing the local part of each process right after calling that function? What about remote handles? Am I supposed to use exchange_owned_mesh or exchange_owned_meshs?
In either case: Can I exchange tags using the exchange_tags functions afterwards?
Maybe someone can help me?
Thanks!
Best regards, Markus Mayr
That will be pretty inefficient, though, since every processor would have to exchange messages with every other processor pairwise. I think the best way to do this would be to do two allgathers and broadcasts, the first for entities and the second for remote handles... those messages will get pretty big, though, esp the remote handle ones. - tim On 11/28/2011 09:55 AM, Hong-Jun Kim wrote:
I think "exchange_owned_meshs" is the right one for you.
You should give a pair of processor and entity information with "exchange_procs" and "exchange_ents" to the function. If you want to exchange mesh entities(entity 1~10) from p0 to p1 and mesh entities(5~17) from p2 to p0, you can make the argument list as follows.
p0 : exchange_procs(1), exchange_ents(1~10) p2 : exchange_procs(0), exchange_ents(5~17)
To exchange remote handle information, you can turn on "store_remote_handles" option. In addition, tag information is automatically exchanged by the function.
Thanks.
----------------------------- Hong-Jun Kim Post-doc researcher MCS, Argonne National Laboratory 9700 S. Cass Ave. B240/R2147 Argonne, IL 60439 630-252-4791 [email protected] -----------------------------
----- Original Message -----
From: "Markus Mayr"<[email protected]> To: [email protected] Sent: Monday, November 28, 2011 9:06:17 AM Subject: [MOAB-dev] Question: Exchange part of mesh so that it is available to all processes Dear list,
I have got a question regarding a distributed mesh.
Although I know this is necessarily inefficient, I would like to make a part of the mesh available to all processes, more precisely the boundary faces and vertices of my volume mesh.
I do not know which function I am supposed to use or even if there is a function that does what I want. As far as I can see, send_/recv_ functions send a message from one process to another one, so these functions probably do not what I want.
broadcast_entities might be the right thing, maybe something like broadcast_entities(mpi_rank, owned_boundary_entities) results in owned_boundary_entities containing *all* boundary entities? But on the other hand, according to the documentation all processes should know about the whole mesh, which is not the case for me. Apart from that I do not know what remote handles are.
The other option would be exchange_owned_mesh(s), I think. Is exchange_procs simply a list of all processes involved and exchange_ents a list containing the local part of each process right after calling that function? What about remote handles? Am I supposed to use exchange_owned_mesh or exchange_owned_meshs?
In either case: Can I exchange tags using the exchange_tags functions afterwards?
Maybe someone can help me?
Thanks!
Best regards, Markus Mayr
-- ================================================================ "You will keep in perfect peace him whose mind is steadfast, because he trusts in you." Isaiah 26:3 Tim Tautges Argonne National Laboratory ([email protected]) (telecommuting from UW-Madison) phone (gvoice): (608) 354-1459 1500 Engineering Dr. fax: (608) 263-4499 Madison, WI 53706
participants (3)
-
Hong-Jun Kim -
Markus Mayr -
Tim Tautges