[petsc-users] DMPlex distribution with FVM adjacency

Stefano Zampini stefano.zampini at gmail.com
Thu Jun 1 13:12:53 CDT 2017


> On Jun 1, 2017, at 5:51 PM, Lawrence Mitchell <lawrence.mitchell at imperial.ac.uk> wrote:
> 
> On 25/05/17 21:00, Matthew Knepley wrote:
>> On Thu, May 25, 2017 at 2:22 PM, Lawrence Mitchell
>> <lawrence.mitchell at imperial.ac.uk
>> <mailto:lawrence.mitchell at imperial.ac.uk>> wrote:
>> 
>> 
>>> On 25 May 2017, at 20:03, Matthew Knepley <knepley at gmail.com <mailto:knepley at gmail.com>> wrote:
>>> 
>>> 
>>> Hmm, I thought I made adjacency per field. I have to look. That way, no problem with the Stokes example. DG is still weird.
>> 
>>    You might, we don't right now.  We just make the topological
>>    adjacency that is "large enough", and then make fields on that.
>> 
>>> 
>>> That seems baroque. So this is just another adjacency pattern. You should be able to easily define it, or if you are a patient person,
>>> wait for me to do it. Its here
>>> 
>>> https://bitbucket.org/petsc/petsc/src/01c3230e040078628f5e559992965c1c4b6f473d/src/dm/impls/plex/plexdistribute.c?at=master&fileviewer=file-view-default#plexdistribute.c-239
>>    <https://bitbucket.org/petsc/petsc/src/01c3230e040078628f5e559992965c1c4b6f473d/src/dm/impls/plex/plexdistribute.c?at=master&fileviewer=file-view-default#plexdistribute.c-239>
>>> 
>>> I am more than willing to make this overridable by the user through function composition or another mechanism.
>> 
>>    Hmm, that naive thing of just modifying the XXX_Support_Internal
>>    to compute with DMPlexGetTransitiveClosure rather than
>>    DMPlexGetCone didn't do what I expected, but I don't understand
>>    the way this bootstrapping is done very well.
>> 
>> 
>> It should do the right thing. Notice that you have to be careful about
>> the arrays that you use since I reuse them for efficiency here.
>> What is going wrong?
> 
> Coming back to this, I think I understand the problem a little better.
> 
> Consider this mesh:
> 
> +----+
> |\ 3 |
> | \  |
> |2 \ |
> |   \|
> +----+
> |\ 1 |
> | \  |
> |0 \ |
> |   \|
> +----+
> 
> Let's say I run on 3 processes and the initial (non-overlapped) cell
> partition is:
> 
> rank 0: cell 0
> rank 1: cell 1 & 2
> rank 2: cell 3
> 
> Now I'd like to grow the overlap such that any cell I can see through
> a facet (and its closure) lives in the overlap.
> 

Lawrence, why do you need the closure here? Why facet adjacency is not enough? 

> So great, I just need a new adjacency relation that gathers
> closure(support(point))
> 
> But, that isn't right, because now on rank 0, I will get a mesh that
> looks like:
> 
> +
> |
> |
> |
> |
> +----+
> |\ 1 |
> | \  |
> |0 \ |
> |   \|
> +----+
> 
> Because I grab all the mesh points in the adjacency of the initial cell:
> 
> +
> |\
> | \
> |0 \
> |   \
> +----+
> 
> And on the top vertex that pulls in the facet (but not the cell).
> 
> So I can write a "DMPlexGetAdjacency" information that only returns
> non-empty adjacencies for facets.  But it's sort of lying about what
> it does now.
> 
> Thoughts?
> 
> Lawrence
> 



More information about the petsc-users mailing list