<div dir="ltr"><div dir="ltr">On Fri, Mar 19, 2021 at 10:21 AM Jed Brown <<a href="mailto:jed@jedbrown.org">jed@jedbrown.org</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>> writes:<br>
<br>
> On Fri, Mar 19, 2021 at 7:30 AM Lawrence Mitchell <<a href="mailto:wence@gmx.li" target="_blank">wence@gmx.li</a>> wrote:<br>
><br>
>> > On 19 Mar 2021, at 03:51, Jed Brown <<a href="mailto:jed@jedbrown.org" target="_blank">jed@jedbrown.org</a>> wrote:<br>
>> ><br>
>> > It's a notable weakness of DMPlex that it does not apply such an<br>
>> ordering of dofs and I've complained to Matt about it many times over the<br>
>> years, but any blame rests solely with me for not carving out time to<br>
>> implement it here.<br>
>><br>
>> I think there is a way to do this with plex (at least we do it), like so:<br>
>><br>
>> DMPlexGetOrdering(dm, MATORDERINGRCM, NULL, &isperm);<br>
>><br>
>> you might need to then invert this ordering.<br>
>><br>
>> Now when you make a section you either say<br>
>><br>
>> PetscSectionSetPermutation(section, isperm);<br>
>><br>
><br>
> You can do that if you only want to permute the dofs, but usually I want to<br>
> reorder everything so that any Section comes out right<br>
><br>
>   DMPlexPermute()<br>
<br>
Last we talked, and all that's tested, this can only permute within strata, not across strata. That would incur the "basically point Jacobi" problem for naive OpenMP smoothers highlighted in Allison's paper and (what I care about more) the memory locality impact is similar to moving from interlaced fields to segregated fields.<br>
<br>
diff --git i/src/dm/impls/plex/tests/ex10.c w/src/dm/impls/plex/tests/ex10.c<br>
index eed9aa878e..cfe35dc1a6 100644<br>
--- i/src/dm/impls/plex/tests/ex10.c<br>
+++ w/src/dm/impls/plex/tests/ex10.c<br>
@@ -80,6 +80,7 @@ PetscErrorCode TestReordering(DM dm, AppCtx *user)<br>
<br>
   PetscFunctionBegin;<br>
   ierr = DMPlexGetOrdering(dm, order, NULL, &perm);CHKERRQ(ierr);<br>
+  ierr = ISView(perm, NULL);CHKERRQ(ierr);<br>
   ierr = DMPlexPermute(dm, perm, &pdm);CHKERRQ(ierr);<br>
   ierr = PetscObjectSetOptionsPrefix((PetscObject) pdm, "perm_");CHKERRQ(ierr);<br>
   ierr = DMSetFromOptions(pdm);CHKERRQ(ierr);<br>
<br>
<br>
<br>
$ $PETSC_ARCH/tests/dm/impls/plex/tests/ex10 -dim 2 -num_dof 1,1,1 -perm_dm_view<br>
IS Object: 1 MPI processes<br>
  type: general<br>
Number of indices in set 33<br>
0 0<br>
1 2<br>
2 1<br>
3 5<br>
4 3<br>
5 7<br>
6 6<br>
7 4<br>
8 8<br>
9 9<br>
10 13<br>
11 10<br>
12 11<br>
13 15<br>
14 12<br>
15 14<br>
16 16<br>
17 17<br>
18 18<br>
19 19<br>
20 22<br>
21 23<br>
22 21<br>
23 20<br>
24 24<br>
25 28<br>
26 29<br>
27 25<br>
28 30<br>
29 31<br>
30 32<br>
31 26<br>
32 27<br>
DM Object: (perm_) 1 MPI processes<br>
  type: plex<br>
DM_0x564eba4a45d0_1 in 2 dimensions:<br>
  0-cells: 9<br>
  1-cells: 16<br>
  2-cells: 8<br>
Labels:<br>
  celltype: 3 strata with value/size (0 (9), 3 (8), 1 (16))<br>
  depth: 3 strata with value/size (0 (9), 1 (16), 2 (8))<br>
  marker: 1 strata with value/size (1 (16))<br>
  Face Sets: 1 strata with value/size (1 (8))<br>
Field Field_0:<br>
  adjacency FEM<br>
Ordering method rcm reduced bandwidth from 51 to 51<br>
<br>
<br>
Notice how the permutations are contained within the vertices {0, ..., 8}, edges {9, ..., 24}, and cells {25, ..., 32}. I would like to get rid of that restriction, but you've said it would have significant non-local consequences so I haven't tried.<br>
</blockquote></div><br clear="all"><div>Yes, that is not a good idea, even in theory. It wrecks the nice contiguity we use for topological operations.</div><div><br></div><div>As Lawrence points out, this need not affect your smoother because dof permutations can break this stratification. It has been that way for a decade.</div><div><br></div><div>   Thanks,</div><div><br></div><div>     Matt</div><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>