The following code fragment is part of a program that behaves correctly when
invoked to run on a single processor (ie using : mpirun -n 1 main)
libMesh::BoundaryInfo& bdry_info = tet_mesh.get_boundary_info();
for (auto pp_elem = tet_mesh.local_elements_begin(); pp_elem !=
tet_mesh.local_elements_end(); ++pp_elem)
{
Elem* elem = *pp_elem;
for( unsigned int is = 0; is < 4; ++is)
if ( /* stuff */)
bdry_info.add_side(elem, is, sideset_id);
}
However, when I invoke it with several processors (ie using mpirun -n 4 main),
the BoundaryInfo object does not contain all of the sidesets that it contains
on a single processor.
I suspect that the issue here is that several processors are writing to the
same memory location (ie the BoundaryInfo object) without appropriate
synchonization/mutex code.
I certainly didn't add any such code.
Is my suspicion correct or are there other problems with the code?
In the former case, can someone point me to some correct code in which mesh
elements are processed in parallel and a common data structure is modified by
each thread/process?
dan
_______________________________________________
Libmesh-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-users