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
