[MOAB-dev] Boundary nodes and faces
Vijay S. Mahadevan
vijay.m at gmail.com
Thu Aug 15 09:54:36 CDT 2013
> You are using your fork, I assume, that accepts the fileset as input;
Yes, this was part of the recent pull request, that you approved.
> Still, you are filtering out non-owned entities; you should remove shared
> entities;
I updated that code to filter shared entities after finding only owned
entities. I dont filter multishared since I assumed if something is
not shared, it cannot be multishared ?
> It is possible that a face is owned, but shared, it will be then in the
> interior of domain (between parts, but not on the true boundary)
True. This will give me a way to find only interior faces at the
processor boundary.
> You can do adjacency call, toward dimension 3 (from 2); you will get
> adjacent element;
Got it. I have all the entities on the boundary of the mesh and life is good :)
Vijay
On Thu, Aug 15, 2013 at 9:15 AM, Iulian Grindeanu <iulian at mcs.anl.gov> wrote:
>
>
> ________________________________
>
> This was actually simpler than I thought. Couple of lines solved the issue:
>
> skinner.find_skin(fileset, elocal, false, bndyfaces, bndyelems);
> pcomm->filter_pstatus(bndyfaces,PSTATUS_NOT_OWNED,PSTATUS_NOT);
> mbiface->get_connectivity(bndyfaces, bndyvtx, false);
>
> I thought that the bndyelems range would contain all the element handles
> that contain the face after the find_skin call. But this is not the case.
>
> I think this is not correct;
> You are using your fork, I assume, that accepts the fileset as input;
> there are bndyfaces and bndyelems returned; bndyelems is for "reversed
> entities"
> If you passed that as NULL (default) all entities are returned in bndyfaces;
> if it is not null, the forward and reverse entities are returned separately.
> (forward and reverse with respect to the adjacent entity in elocal range)
> Still, you are filtering out non-owned entities; you should remove shared
> entities;
>
> If in 3d, you do not have to worry about multishared, usually you cannot
> have faces that are "multishared", for a correct mesh.
>
> It is possible that a face is owned, but shared, it will be then in the
> interior of domain (between parts, but not on the true boundary)
>
> do this:
> rval = pcomm->get_shared_entities(-1, shared_ents);// will return all shared
> entities, including edges, vertices, but you do not care
> result = subtract(bndyfaces, shared_ents); // the result will be just faces
> that are on true boundary
>
>
>
>> My next related question (but not about the skinner though) is whether I
>> can do the reverse lookup of the element to which a face belongs to ?
>
> You can do adjacency call, toward dimension 3 (from 2); you will get
> adjacent element;
> get_adjacencies(const EntityHandle *from_entities,
> const int num_entities,
> const int to_dimension,
> const bool create_if_missing,
> Range &adj_entities,
> const int operation_type =
> Interface::INTERSECT) = 0;
>
> if on true boundary, you will have exactly one element adjacent to a face:
> get_adjacencies(&face,
> 1,
> 3,
> false,
> elemRange);
> elemRange will have one element
>
>
>
> On Wed, Aug 14, 2013 at 10:01 PM, Vijay S. Mahadevan <vijay.m at gmail.com>
> wrote:
>>
>> Tim, Iulian,
>>
>> Thanks for the pointers. I think going from the highest-dimension down and
>> removing shared entities from the list makes sense. I have a partial
>> implementation that already does this and will check whether this algorithm
>> yields what I need.
>>
>> I was originally thinking that Skinner:: find_geometric_skin would give me
>> the boundary vertices but doing it by the process of elimination might be
>> the right way since there is no reliance on GEOM_DIMENSION tag being
>> explicitly defined.
>>
>> Shall update soon.
>> Vijay
>>
>>
>> On Wed, Aug 14, 2013 at 9:50 PM, Tim Tautges <tautges at mcs.anl.gov> wrote:
>>>
>>> Note, I've added this to the MOAB faq,
>>> http://trac.mcs.anl.gov/projects/ITAPS/wiki/ParallelGeomSkin.
>>>
>>> - tim
>>>
>>>
>>> On 08/14/2013 09:31 PM, Tim Tautges wrote:
>>>>
>>>> This is tricky. As you say, if you get the local skin, that'll include
>>>> interior entities shared with/ghosted from other
>>>> procs. If you get the skin and remove the shared entities, that'll
>>>> remove the vertices that are on the geometric skin
>>>> but also shared with other procs. The right way to do this is:
>>>>
>>>> - get the highest-dimensional entities on the skin (1d if in 2d, 2d if
>>>> in 3d)
>>>> - remove any shared entities from that range (because if it's shared,
>>>> then by definition there will be d+1 - dimensional
>>>> entities on the other proc)
>>>> - if you're in 3d and you also want skin edges, get the edges adj to the
>>>> entities in the range (remember the UNION arg
>>>> on get_adjacencies), put in tmp range, then do the same for vertices,
>>>> also put in tmp range
>>>> - merge the tmp range with the original range
>>>>
>>>> Like I said, tricky, but welcome to parallel mesh.
>>>
>>>
>>> --
>>> ================================================================
>>> "You will keep in perfect peace him whose mind is
>>> steadfast, because he trusts in you." Isaiah 26:3
>>>
>>> Tim Tautges Argonne National Laboratory
>>> (tautges at mcs.anl.gov) (telecommuting from UW-Madison)
>>> phone (gvoice): (608) 354-1459 1500 Engineering Dr.
>>> fax: (608) 263-4499 Madison, WI 53706
>>>
>>
>
>
More information about the moab-dev
mailing list