Create a new mesh partitioner for BoundaryMesh will do, and the boundary 
calculation becomes much more balanced.

#include "libmesh/metis_partitioner.h"

BoundaryMesh boundary_mesh(mesh.comm() , dim-1);
mesh.get_boundary_info().sync(boundary_mesh);

MetisPartitioner bs_partitioner;
bs_partitioner.partition(boundary_mesh);

Xikai

From: [email protected]
To: [email protected]
Subject: mesh partition for BoundaryMesh
Date: Wed, 10 Jun 2015 18:30:00 -0500




Dear libMesh developers and users,

I created a BoundaryMesh from a VolumeMesh, and an ExplicitSystem to do 
calculation only on BoundaryMesh. When running simulation in parallel, there 
seems to be a load imbalance, i.e. the ratios of max to min over all processors 
ranges from 1.8 to 2282 for Vector operations when using 40 cores. See attached 
output.txt for log_summaries on 24, 32 and 40 cores.

The load imbalance might come from using the same mesh partitioner for both 
VolumeMesh and BoundaryMesh. To validate this, I output the processor_ids for 
every nodes on BoundaryMesh and VolumeMesh, and found that BoundaryMesh and 
VolumeMesh have the same partitioning pattern on the surface. For the 
BoundaryMesh, some processors have relatively small fractions of the whole 
surface, while some processors have relatively larger fractions, which could 
lead to load imbalance (see attached picture). If some processors only deal 
with nodes in the interior but not on the boundary, then they'll be idling 
during BoundaryMesh calculation.

I'm thinking
1) Is there a way to define a separate mesh partitioner for BoundaryMesh that 
could partition BoundaryMesh more uniformly onto every processor?
2) Are there any examples or codes to look at to achieve this?

Thank in advance for your time.

Regards,
Xikai

I tried adding a boundary_mesh.partition();, but it generates the same 
partitioning pattern as before:

LibMeshInit init (argc, argv);

Mesh mesh(init.comm());
mesh.read("meshin");
int dim = mesh.mesh_dimension();

BoundaryMesh boundary_mesh(mesh.comm() , dim-1);
mesh.get_boundary_info().sync(boundary_mesh);

boundary_mesh.partition();
                                                                                
  
------------------------------------------------------------------------------
_______________________________________________
Libmesh-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to