(I'm moving this part to the devel list.) On 11/12/08 7:34 PM, "Roy Stogner" <[EMAIL PROTECTED]> wrote:
>> Ah... right again. Right now find_neighbors() blows away all neighbor >> information at the beginning, but I am about to change that for another >> reason... (finishing the nemesis stuff). > > Run your changes by me? find_neighbors() is probably where we need > to fix the outstanding bug in ParallelMesh adaptive coarsening, too. I'm not sure what that bug is, but here's what I've got planned... Right now the Nemesis importer will allow you to read parallel files, in which each processor reads its local elements, their boundary conditions, and all the nodes needed by its local elements. There appears to be provisions in the file format for 'ghost' elements, but as far as I can tell these are not required so I do not want to count on them. At the end of the read, each processor has its elements, and proper ownership of the nodes (by our min(pid) over the patch convention) has been established. But there is no neighbor connectivity. So what I want to do is: (1) find_neighbors() to immediately establish all local-to-local neighbor element connectivity. (2) compute a bounding box for the local elements, and communicate these globally in an alltoall or something (3) figure out which processors have touching bounding boxes, and thus hold potential neighbors (4) build a sorted list of all the nodes on the current processor that live on faces with NULL neighbors (5) send this list off to each of those potentially neighboring processors, receive back all their elements which have 2 or more nodes in the list (could be 1, but I *think* 2 is sufficient) (6) add their elements to the local mesh, find_neighbors() again. But here I don't want to throw away the information from 1, just to update it with the new elements. (I was just thinking about an optional bool remove_existing_neighbor_info = true or something like that... But if there is something else in find_neighbors() that needs to change I'm open to suggestions.) (7) after all this, by my estimation any *local* element that has a NULL neighbor truly does live on the boundary. There is a final step to add RemoteElem's where needed to the ghost element neighbor list, but that is doable by asking their owning processor. -Ben ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Libmesh-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/libmesh-devel
