<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Feb 22, 2017 at 9:24 AM, Jed Brown <span dir="ltr"><<a href="mailto:jed@jedbrown.org" target="_blank">jed@jedbrown.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Chris Eldred <<a href="mailto:chris.eldred@gmail.com">chris.eldred@gmail.com</a>> writes:<br>
<br>
> Hey PETSc-dev,<br>
><br>
> Is it possible to create a LocalToGlobal mapping (or another PETSc<br>
> construct) such that a single local value is associated with multiple<br>
> global values?<br>
><br>
> For example, let's say I am in 1D with a DMDA with 4 elements using<br>
> Ghosted boundaries.<br>
> The global space looks like:<br>
> 1 - 2 - 3 - 4<br>
> and the local space looks like:<br>
> 1 - 2 - 3 - 4 - 5 - 6<br>
> and the default local to global mapping is:<br>
> 0 -> -1<br>
> 1 -> 0<br>
> 2 -> 1<br>
> 3 -> 2<br>
> 4 -> 3<br>
> 5 -> -1<br>
> Can this be modified to something like:<br>
> 0 -> -1<br>
> 1 -> 0<br>
> 2 -> 1<br>
> 3 -> 2<br>
> 4 -> 3 , 2<br>
> 5 -> -1<br>
> where now the value in index 4 of the local vector gets scattered to<br>
> both index 2 and 3 in the global vector when using VecScatter with the<br>
> LocalToGlobal mapping set to the above?<br>
><br>
> What about when using MatSetValuesLocal? Is it possible to have a<br>
> single entry in the local matrix get put into multiple locations in<br>
> the global matrix? When the row and column LocalToGlobal maps are<br>
> different?<br>
><br>
> If so, are there any example or writeups of how to do either of these?<br>
<br>
No, you can have different local indices map to the same global index,<br>
but you can't have one local index map to multiple global indices.  If<br>
such a semantic were supported, what would the result of a<br>
Global-to-Local update even mean?<br>
<br>
> It's seems like star forests are the way to do this, but I don't<br>
> really understand how they work. Is there a writeup for them?<br>
<br>
Slightly dated, but mostly accurate.<br>
<br>
<a href="https://jedbrown.org/files/StarForest.pdf" rel="noreferrer" target="_blank">https://jedbrown.org/files/<wbr>StarForest.pdf</a><br>
<br>
In SF terminology, you can't have a leaf map to multiple roots.<br></blockquote><div><br></div><div>How about the inverse of SF? The original leaf becomes  a new root, and the original leaf will map to multiple new leafs?<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
> The context for this question is a multipatch finite element code,<br>
> where each patch is treated using a DMDA and we would like to couple<br>
> degrees of freedom along patch boundaries, such that when the<br>
> contribution of the elements along a boundary to the global matrix are<br>
> computed the result goes into the rows for the dofs on each patch (and<br>
> similarly for residual calculations).<br>
<br>
That's a good way to produce a singular global matrix.  Either eliminate<br>
the duplicated degrees of freedom (this is the standard method, slave<br>
dofs are written as a linear combination of master dofs) or introduce a<br>
Lagrange multiplier to enforce continuity.<br>
</blockquote></div><br></div></div>