(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

Reply via email to