[petsc-users] DMPlex overlap

Nicolas Barral nicolas.barral at inria.fr
Fri Apr 16 14:43:09 CDT 2021


On 16/04/2021 13:17, Matthew Knepley wrote:
> On Fri, Apr 16, 2021 at 5:50 AM Nicolas Barral 
> <nicolas.barral at math.u-bordeaux.fr 
> <mailto:nicolas.barral at math.u-bordeaux.fr>> wrote:
> 
>     On 31/03/2021 21:44, Matthew Knepley wrote:
>      > On Wed, Mar 31, 2021 at 3:36 PM Nicolas Barral
>      > <nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      > <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>> wrote:
>      >
>      >     On 31/03/2021 21:24, Matthew Knepley wrote:
>      >      >     Ok so that's worth clarifying, but my problem is that
>     dm has a
>      >      >     0-overlap
>      >      >     before DMPlexDistributeOverlap and odm has a 1-overlap
>     even
>      >     though I
>      >      >     passed "0". If I understand what you just wrote,
>     adding "0"
>      >     more levels
>      >      >     of overlap to 0-overlap, that should still be 0 overlap ?
>      >      >
>      >      >     Yet when I look at the code of DMPlexDistributeOverlap,
>      >     you're flagging
>      >      >     points to be added to the overlap whatever "k" is.
>      >      >
>      >      >
>      >      > Crap. There is a bug handling 0. Evidently, no one ever
>     asks for
>      >     overlap 0.
>      >      > Will fix.
>      >      >
>      >     ok now I'm sure I understand what you explained :) Thanks Matt.
>      >
>      >     Now we can look at the other question: I need to be able to
>     pass the
>      >     non-overlapping mesh to the remesher. I can either maintain 2
>      >     plexes, or
>      >     trim the overlapping plex when I create the arrays I pass to the
>      >     remesher. I'm not sure which is the best/worst ?
>      >
>      >
>      > I would start with two plexes since it is very easy.
> 
>     Hi Matt,
> 
>     I've been playing with two plexes, and am running in an unexpected
>     issue. It seems that the vertices ordering of the new overlapping plex
>     is not the same as the one of the original plex, which makes converting
>     a Vec from one plex to the other difficult. Can you please confirm it's
>     the case, and is there a way to convert the Vecs out of the box ?
> 
> 
> Okay, we should get all the new cells at the end of the current cells, 
> but then we automatically create
> the renumbering for the cones using the global vertex numbering. Thus it 
> looks like they could get
> renumbered if the vertex of a new cell has a lower global number than 
> some existing vertex.
> 
> Whenever we move things around, we give back the PetscSF we built to do 
> the moving. The idea is
> that you can use the returned SF to move anything that we did not, using 
> the same method we used to
> move the internal things. For example, DMMigrate() takes an SF and moves 
> the internal mesh data,
> cones + labels + coordinates. It calls DMPlexDistributeField() to move 
> the coordinate data. You can
> call the same thing. If you have your two vectors+sections already 
> created, and you just want to go
> back and forth, you can use PetscSFCreateSectionSF() (which you can 
> store) and SFBcast(). This is
> done inside DMPlexDistributeField().
> 
> Does this make sense?
>

Thanks Matt, it makes more sense, now I need to experiment more to 
understand the details.

What I need is going from the overlapping plex to the non-overlapping, 
so the SF would be the inverse from the one given by DistributeOverlap. 
Is there a way to reuse the SF ? (maybe I could work around it by doing 
an SFReduce instead of SFBcast). Or should I build a new SF ? (I could 
use PetscSFCreateInverseSF after removing remote roots from the ovelap 
SF). What do you think ?

By the way, there seems to be a problem with online documentation:
this page: 
https://www.mcs.anl.gov/petsc/petsc-main/docs/manualpages/SF/PetscSFCreateSectionSF.html
has a link "Index of all SF routines" that points to 
https://www.mcs.anl.gov/petsc/petsc-main/docs/manualpages/SF/index.html 
which is almost empty instead of 
https://www.mcs.anl.gov/petsc/petsc-main/docs/manualpages/PetscSF/index.html
Where should I report it ?

Thanks

-- 
Nicolas

>    Thanks,
> 
>       Matt
> 
>     Else filtering the plex may be easier.
> 
>     Thanks
> 
>     -- 
>     Nicolas
> 
>      >
>      > Trimming the plex would essentially make another plex anyway, but
>     it is
>      > not hard using DMPlexFilter().
>      >
>      >    Thanks,
>      >
>      >       Matt
>      >
>      >     Thanks
>      >
>      >     --
>      >     Nicolas
>      >
>      >
>      >      >    Thanks,
>      >      >
>      >      >       Matt
>      >      >
>      >      >     Sample code:
>      >      >     static char help[] = "Tests plex distribution and
>     overlaps.\n";
>      >      >
>      >      >     #include <petsc/private/dmpleximpl.h>
>      >      >
>      >      >     int main (int argc, char * argv[]) {
>      >      >
>      >      >         DM             dm, odm;
>      >      >         MPI_Comm       comm;
>      >      >         PetscErrorCode ierr;
>      >      >
>      >      >         ierr = PetscInitialize(&argc, &argv, NULL,
>     help);if (ierr)
>      >      >     return ierr;
>      >      >         comm = PETSC_COMM_WORLD;
>      >      >
>      >      >         ierr = DMPlexCreateBoxMesh(comm, 2, PETSC_TRUE, NULL,
>      >     NULL, NULL,
>      >      >     NULL, PETSC_TRUE, &dm);CHKERRQ(ierr);
>      >      >         ierr = DMSetFromOptions(dm);CHKERRQ(ierr);
>      >      >
>      >      >
>      >      >
>      >      >         ierr = PetscObjectSetName((PetscObject) dm, "DM
>      >      >     before");CHKERRQ(ierr);
>      >      >         ierr = DMViewFromOptions(dm, NULL,
>      >     "-before_dm_view");CHKERRQ(ierr);
>      >      >         DMPlexDistributeOverlap(dm, 0, NULL, &odm);
>      >      >         ierr = PetscObjectSetName((PetscObject) odm, "DM
>      >      >     after");CHKERRQ(ierr);
>      >      >         ierr = DMViewFromOptions(odm, NULL,
>      >     "-after_dm_view");CHKERRQ(ierr);
>      >      >
>      >      >
>      >      >         ierr = DMDestroy(&dm);CHKERRQ(ierr);
>      >      >         ierr = DMDestroy(&odm);CHKERRQ(ierr);
>      >      >         ierr = PetscFinalize();
>      >      >         return ierr;
>      >      >     }
>      >      >
>      >      >     % mpiexec -n 2 ./test_overlapV3 -dm_plex_box_faces 5,5
>      >     -dm_distribute
>      >      >     -before_dm_view -after_dm_view
>      >      >     DM Object: DM before 2 MPI processes
>      >      >         type: plex
>      >      >     DM before in 2 dimensions:
>      >      >         0-cells: 21 21
>      >      >         1-cells: 45 45
>      >      >         2-cells: 25 25
>      >      >     Labels:
>      >      >         depth: 3 strata with value/size (0 (21), 1 (45), 2
>     (25))
>      >      >         celltype: 3 strata with value/size (0 (21), 1
>     (45), 3 (25))
>      >      >         marker: 1 strata with value/size (1 (21))
>      >      >         Face Sets: 1 strata with value/size (1 (10))
>      >      >     DM Object: DM after 2 MPI processes
>      >      >         type: plex
>      >      >     DM after in 2 dimensions:
>      >      >         0-cells: 29 29
>      >      >         1-cells: 65 65
>      >      >         2-cells: 37 37
>      >      >     Labels:
>      >      >         depth: 3 strata with value/size (0 (29), 1 (65), 2
>     (37))
>      >      >         celltype: 3 strata with value/size (0 (29), 1
>     (65), 3 (37))
>      >      >         marker: 1 strata with value/size (1 (27))
>      >      >         Face Sets: 1 strata with value/size (1 (13))
>      >      >
>      >      >
>      >      >
>      >      >      >
>      >      >      >    Thanks,
>      >      >      >
>      >      >      >       Matt
>      >      >      >
>      >      >      >     Thanks,
>      >      >      >
>      >      >      >     --
>      >      >      >     Nicolas
>      >      >      >
>      >      >      >      >
>      >      >      >      >    Thanks,
>      >      >      >      >
>      >      >      >      >       Matt
>      >      >      >      >
>      >      >      >      >         if (!dm) {printf("Big problem\n");
>     dm = odm;}
>      >      >      >      >         else     {DMDestroy(&odm);}
>      >      >      >      >         ierr =
>     PetscObjectSetName((PetscObject) dm,
>      >     "Initial
>      >      >      >      >     DM");CHKERRQ(ierr);
>      >      >      >      >         ierr = DMViewFromOptions(dm, NULL,
>      >      >      >      >     "-initial_dm_view");CHKERRQ(ierr);
>      >      >      >      >
>      >      >      >      >
>      >      >      >      >         ierr = DMDestroy(&dm);CHKERRQ(ierr);
>      >      >      >      >         ierr = PetscFinalize();
>      >      >      >      >         return ierr;
>      >      >      >      >     }
>      >      >      >      >
>      >      >      >      >     called with mpiexec -n 2 ./test_overlapV3
>      >     -initial_dm_view
>      >      >      >      >     -dm_plex_box_faces 5,5 -dm_distribute
>      >      >      >      >
>      >      >      >      >     gives:
>      >      >      >      >     DM Object: Initial DM 2 MPI processes
>      >      >      >      >         type: plex
>      >      >      >      >     Initial DM in 2 dimensions:
>      >      >      >      >         0-cells: 29 29
>      >      >      >      >         1-cells: 65 65
>      >      >      >      >         2-cells: 37 37
>      >      >      >      >     Labels:
>      >      >      >      >         depth: 3 strata with value/size (0
>     (29), 1
>      >     (65), 2
>      >      >     (37))
>      >      >      >      >         celltype: 3 strata with value/size
>     (0 (29), 1
>      >      >     (65), 3 (37))
>      >      >      >      >         marker: 1 strata with value/size (1
>     (27))
>      >      >      >      >         Face Sets: 1 strata with value/size
>     (1 (13))
>      >      >      >      >
>      >      >      >      >     which is not what I expect ?
>      >      >      >      >
>      >      >      >      >     Thanks,
>      >      >      >      >
>      >      >      >      >     --
>      >      >      >      >     Nicolas
>      >      >      >      >
>      >      >      >      >     On 31/03/2021 19:02, Matthew Knepley wrote:
>      >      >      >      >      > Alright, I think the problem had to
>     do with
>      >     keeping
>      >      >     track
>      >      >      >     of what
>      >      >      >      >     DM you
>      >      >      >      >      > were looking at. This code increases the
>      >     overlap of an
>      >      >      >     initial DM:
>      >      >      >      >      >
>      >      >      >      >      > static char help[] = "Tests plex
>      >     distribution and
>      >      >      >     overlaps.\n";
>      >      >      >      >      >
>      >      >      >      >      > #include <petsc/private/dmpleximpl.h>
>      >      >      >      >      >
>      >      >      >      >      > int main (int argc, char * argv[]) {
>      >      >      >      >      >
>      >      >      >      >      >    DM             dm, dm2;
>      >      >      >      >      >    PetscInt       overlap;
>      >      >      >      >      >    MPI_Comm       comm;
>      >      >      >      >      >    PetscErrorCode ierr;
>      >      >      >      >      >
>      >      >      >      >      >    ierr = PetscInitialize(&argc,
>     &argv, NULL,
>      >      >     help);if (ierr)
>      >      >      >      >     return ierr;
>      >      >      >      >      >    comm = PETSC_COMM_WORLD;
>      >      >      >      >      >
>      >      >      >      >      >    ierr = DMPlexCreateBoxMesh(comm, 2,
>      >     PETSC_TRUE,
>      >      >     NULL,
>      >      >      >     NULL, NULL,
>      >      >      >      >      > NULL, PETSC_TRUE, &dm);CHKERRQ(ierr);
>      >      >      >      >      >    ierr =
>     DMSetFromOptions(dm);CHKERRQ(ierr);
>      >      >      >      >      >    ierr =
>     PetscObjectSetName((PetscObject)
>      >     dm, "Initial
>      >      >      >      >     DM");CHKERRQ(ierr);
>      >      >      >      >      >    ierr = DMViewFromOptions(dm, NULL,
>      >      >      >      >     "-initial_dm_view");CHKERRQ(ierr);
>      >      >      >      >      >
>      >      >      >      >      >    ierr = DMPlexGetOverlap(dm,
>      >     &overlap);CHKERRQ(ierr);
>      >      >      >      >      >    ierr = DMPlexDistributeOverlap(dm,
>      >     overlap+1, NULL,
>      >      >      >      >     &dm2);CHKERRQ(ierr);
>      >      >      >      >      >    ierr =
>     PetscObjectSetName((PetscObject) dm2,
>      >      >     "More Overlap
>      >      >      >      >      > DM");CHKERRQ(ierr);
>      >      >      >      >      >    ierr = DMViewFromOptions(dm2, NULL,
>      >      >      >      >     "-over_dm_view");CHKERRQ(ierr);
>      >      >      >      >      >
>      >      >      >      >      >    ierr = DMDestroy(&dm2);CHKERRQ(ierr);
>      >      >      >      >      >    ierr = DMDestroy(&dm);CHKERRQ(ierr);
>      >      >      >      >      >    ierr = PetscFinalize();
>      >      >      >      >      >    return ierr;
>      >      >      >      >      > }
>      >      >      >      >      >
>      >      >      >      >      > and when we run it we get the
>     expected result
>      >      >      >      >      >
>      >      >      >      >      > master *:~/Downloads/tmp/Nicolas$
>      >      >      >     /PETSc3/petsc/apple/bin/mpiexec
>      >      >      >      >     -n 2
>      >      >      >      >      > ./test_overlap -initial_dm_view
>      >     -dm_plex_box_faces 5,5
>      >      >      >      >     -dm_distribute
>      >      >      >      >      > -dm_distribute_overlap 1 -over_dm_view
>      >      >      >      >      > DM Object: Initial DM 2 MPI processes
>      >      >      >      >      >    type: plex
>      >      >      >      >      > Initial DM in 2 dimensions:
>      >      >      >      >      >    0-cells: 29 29
>      >      >      >      >      >    1-cells: 65 65
>      >      >      >      >      >    2-cells: 37 37
>      >      >      >      >      > Labels:
>      >      >      >      >      >    depth: 3 strata with value/size (0
>     (29),
>      >     1 (65),
>      >      >     2 (37))
>      >      >      >      >      >    celltype: 3 strata with value/size
>     (0 (29), 1
>      >      >     (65), 3 (37))
>      >      >      >      >      >    marker: 1 strata with value/size
>     (1 (27))
>      >      >      >      >      >    Face Sets: 1 strata with
>     value/size (1 (13))
>      >      >      >      >      > DM Object: More Overlap DM 2 MPI
>     processes
>      >      >      >      >      >    type: plex
>      >      >      >      >      > More Overlap DM in 2 dimensions:
>      >      >      >      >      >    0-cells: 36 36
>      >      >      >      >      >    1-cells: 85 85
>      >      >      >      >      >    2-cells: 50 50
>      >      >      >      >      > Labels:
>      >      >      >      >      >    depth: 3 strata with value/size (0
>     (36),
>      >     1 (85),
>      >      >     2 (50))
>      >      >      >      >      >    celltype: 3 strata with value/size
>     (0 (36), 1
>      >      >     (85), 3 (50))
>      >      >      >      >      >    marker: 1 strata with value/size
>     (1 (40))
>      >      >      >      >      >    Face Sets: 1 strata with
>     value/size (1 (20))
>      >      >      >      >      >
>      >      >      >      >      >    Thanks,
>      >      >      >      >      >
>      >      >      >      >      >       Matt
>      >      >      >      >      >
>      >      >      >      >      > On Wed, Mar 31, 2021 at 12:57 PM
>     Matthew Knepley
>      >      >      >      >     <knepley at gmail.com
>     <mailto:knepley at gmail.com> <mailto:knepley at gmail.com
>     <mailto:knepley at gmail.com>>
>      >     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>
>     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>>>
>      >      >     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>
>     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>>
>      >     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>
>     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>>>>
>      >      >      >     <mailto:knepley at gmail.com
>     <mailto:knepley at gmail.com> <mailto:knepley at gmail.com
>     <mailto:knepley at gmail.com>>
>      >     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>
>     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>>>
>      >      >     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>
>     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>>
>      >     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>
>     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>>>>>
>      >      >      >      >      > <mailto:knepley at gmail.com
>     <mailto:knepley at gmail.com>
>      >     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>>
>      >      >     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>
>     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>>>
>      >     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>
>     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>>
>      >      >     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>
>     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>>>>
>      >      >      >     <mailto:knepley at gmail.com
>     <mailto:knepley at gmail.com> <mailto:knepley at gmail.com
>     <mailto:knepley at gmail.com>>
>      >     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>
>     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>>>
>      >      >     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>
>     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>>
>      >     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>
>     <mailto:knepley at gmail.com <mailto:knepley at gmail.com>>>>>>> wrote:
>      >      >      >      >      >
>      >      >      >      >      >     Okay, let me show a really simple
>      >     example that
>      >      >     gives
>      >      >      >     the expected
>      >      >      >      >      >     result before I figure out what
>     is going
>      >     wrong for
>      >      >      >     you. This code
>      >      >      >      >      >
>      >      >      >      >      >     static char help[] = "Tests plex
>      >     distribution and
>      >      >      >     overlaps.\n";
>      >      >      >      >      >
>      >      >      >      >      >     #include <petsc/private/dmpleximpl.h>
>      >      >      >      >      >
>      >      >      >      >      >     int main (int argc, char * argv[]) {
>      >      >      >      >      >        DM                    dm;
>      >      >      >      >      >        MPI_Comm       comm;
>      >      >      >      >      >        PetscErrorCode ierr;
>      >      >      >      >      >
>      >      >      >      >      >        ierr = PetscInitialize(&argc,
>     &argv,
>      >     NULL,
>      >      >     help);if
>      >      >      >     (ierr)
>      >      >      >      >     return
>      >      >      >      >      >     ierr;
>      >      >      >      >      >        comm = PETSC_COMM_WORLD;
>      >      >      >      >      >
>      >      >      >      >      >        ierr =
>     DMPlexCreateBoxMesh(comm, 2,
>      >      >     PETSC_TRUE, NULL,
>      >      >      >      >     NULL, NULL,
>      >      >      >      >      >     NULL, PETSC_TRUE, &dm);CHKERRQ(ierr);
>      >      >      >      >      >        ierr =
>      >     DMSetFromOptions(dm);CHKERRQ(ierr);
>      >      >      >      >      >        ierr =
>      >     PetscObjectSetName((PetscObject) dm,
>      >      >     "Initial
>      >      >      >      >      >     DM");CHKERRQ(ierr);
>      >      >      >      >      >        ierr = DMViewFromOptions(dm, NULL,
>      >      >      >      >     "-initial_dm_view");CHKERRQ(ierr);
>      >      >      >      >      >        ierr =
>     DMDestroy(&dm);CHKERRQ(ierr);
>      >      >      >      >      >        ierr = PetscFinalize();
>      >      >      >      >      >        return ierr;
>      >      >      >      >      >     }
>      >      >      >      >      >
>      >      >      >      >      >     can do all the overlap tests. For
>      >     example, you
>      >      >     can run
>      >      >      >     it naively
>      >      >      >      >      >     and get a serial mesh
>      >      >      >      >      >
>      >      >      >      >      >     master *:~/Downloads/tmp/Nicolas$
>      >      >      >      >     /PETSc3/petsc/apple/bin/mpiexec -n
>      >      >      >      >      >     2 ./test_overlap -initial_dm_view
>      >      >     -dm_plex_box_faces 5,5
>      >      >      >      >      >     DM Object: Initial DM 2 MPI processes
>      >      >      >      >      >        type: plex
>      >      >      >      >      >     Initial DM in 2 dimensions:
>      >      >      >      >      >        0-cells: 36 0
>      >      >      >      >      >        1-cells: 85 0
>      >      >      >      >      >        2-cells: 50 0
>      >      >      >      >      >     Labels:
>      >      >      >      >      >        celltype: 3 strata with
>     value/size (0
>      >     (36),
>      >      >     3 (50),
>      >      >      >     1 (85))
>      >      >      >      >      >        depth: 3 strata with value/size (0
>      >     (36), 1
>      >      >     (85), 2
>      >      >      >     (50))
>      >      >      >      >      >        marker: 1 strata with
>     value/size (1 (40))
>      >      >      >      >      >        Face Sets: 1 strata with
>     value/size
>      >     (1 (20))
>      >      >      >      >      >
>      >      >      >      >      >     Then run it telling Plex to
>     distribute after
>      >      >     creating
>      >      >      >     the mesh
>      >      >      >      >      >
>      >      >      >      >      >     master *:~/Downloads/tmp/Nicolas$
>      >      >      >      >     /PETSc3/petsc/apple/bin/mpiexec -n
>      >      >      >      >      >     2 ./test_overlap -initial_dm_view
>      >      >     -dm_plex_box_faces 5,5
>      >      >      >      >     -dm_distribute
>      >      >      >      >      >     DM Object: Initial DM 2 MPI processes
>      >      >      >      >      >        type: plex
>      >      >      >      >      >     Initial DM in 2 dimensions:
>      >      >      >      >      >        0-cells: 21 21
>      >      >      >      >      >        1-cells: 45 45
>      >      >      >      >      >        2-cells: 25 25
>      >      >      >      >      >     Labels:
>      >      >      >      >      >        depth: 3 strata with value/size (0
>      >     (21), 1
>      >      >     (45), 2
>      >      >      >     (25))
>      >      >      >      >      >        celltype: 3 strata with
>     value/size (0
>      >     (21),
>      >      >     1 (45),
>      >      >      >     3 (25))
>      >      >      >      >      >        marker: 1 strata with
>     value/size (1 (21))
>      >      >      >      >      >        Face Sets: 1 strata with
>     value/size
>      >     (1 (10))
>      >      >      >      >      >
>      >      >      >      >      >     The get the same thing back with
>     overlap = 0
>      >      >      >      >      >
>      >      >      >      >      >     master *:~/Downloads/tmp/Nicolas$
>      >      >      >      >     /PETSc3/petsc/apple/bin/mpiexec -n
>      >      >      >      >      >     2 ./test_overlap -initial_dm_view
>      >      >     -dm_plex_box_faces 5,5
>      >      >      >      >      >     -dm_distribute
>     -dm_distribute_overlap 0
>      >      >      >      >      >     DM Object: Initial DM 2 MPI processes
>      >      >      >      >      >        type: plex
>      >      >      >      >      >     Initial DM in 2 dimensions:
>      >      >      >      >      >        0-cells: 21 21
>      >      >      >      >      >        1-cells: 45 45
>      >      >      >      >      >        2-cells: 25 25
>      >      >      >      >      >     Labels:
>      >      >      >      >      >        depth: 3 strata with value/size (0
>      >     (21), 1
>      >      >     (45), 2
>      >      >      >     (25))
>      >      >      >      >      >        celltype: 3 strata with
>     value/size (0
>      >     (21),
>      >      >     1 (45),
>      >      >      >     3 (25))
>      >      >      >      >      >        marker: 1 strata with
>     value/size (1 (21))
>      >      >      >      >      >        Face Sets: 1 strata with
>     value/size
>      >     (1 (10))
>      >      >      >      >      >
>      >      >      >      >      >     and get larger local meshes with
>     overlap = 1
>      >      >      >      >      >
>      >      >      >      >      >     master *:~/Downloads/tmp/Nicolas$
>      >      >      >      >     /PETSc3/petsc/apple/bin/mpiexec -n
>      >      >      >      >      >     2 ./test_overlap -initial_dm_view
>      >      >     -dm_plex_box_faces 5,5
>      >      >      >      >      >     -dm_distribute
>     -dm_distribute_overlap 1
>      >      >      >      >      >     DM Object: Initial DM 2 MPI processes
>      >      >      >      >      >        type: plex
>      >      >      >      >      >     Initial DM in 2 dimensions:
>      >      >      >      >      >        0-cells: 29 29
>      >      >      >      >      >        1-cells: 65 65
>      >      >      >      >      >        2-cells: 37 37
>      >      >      >      >      >     Labels:
>      >      >      >      >      >        depth: 3 strata with value/size (0
>      >     (29), 1
>      >      >     (65), 2
>      >      >      >     (37))
>      >      >      >      >      >        celltype: 3 strata with
>     value/size (0
>      >     (29),
>      >      >     1 (65),
>      >      >      >     3 (37))
>      >      >      >      >      >        marker: 1 strata with
>     value/size (1 (27))
>      >      >      >      >      >        Face Sets: 1 strata with
>     value/size
>      >     (1 (13))
>      >      >      >      >      >
>      >      >      >      >      >        Thanks,
>      >      >      >      >      >
>      >      >      >      >      >           Matt
>      >      >      >      >      >
>      >      >      >      >      >     On Wed, Mar 31, 2021 at 12:22 PM
>     Nicolas
>      >     Barral
>      >      >      >      >      >   
>       <nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>
>      >      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>>
>      >      >      >      >   
>       <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>
>      >      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>>>
>      >      >      >      >      >
>      >       <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>
>      >      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>>
>      >      >      >      >   
>       <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>
>      >      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>>>>> wrote:
>      >      >      >      >      >
>      >      >      >      >      >
>      >      >      >      >      >
>      >      >      >      >      >         @+
>      >      >      >      >      >
>      >      >      >      >      >         --
>      >      >      >      >      >         Nicolas
>      >      >      >      >      >
>      >      >      >      >      >         On 31/03/2021 17:51, Matthew
>     Knepley
>      >     wrote:
>      >      >      >      >      >          > On Sat, Mar 27, 2021 at
>     9:27 AM
>      >     Nicolas
>      >      >     Barral
>      >      >      >      >      >          >
>      >     <nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>
>      >      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>>
>      >      >      >      >   
>       <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>
>      >      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>>>
>      >      >      >      >      >
>      >       <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>
>      >      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>>
>      >      >      >      >   
>       <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>
>      >      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>>>>
>      >      >      >      >      >          >
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>
>      >      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>>
>      >      >      >      >   
>       <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>
>      >      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>>>
>      >      >      >      >      >
>      >       <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>
>      >      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>>
>      >      >      >      >   
>       <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>
>      >      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>
>      >      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>
>      >     <mailto:nicolas.barral at math.u-bordeaux.fr
>     <mailto:nicolas.barral at math.u-bordeaux.fr>>>>>>>> wrote:
>      >      >      >      >      >          >
>      >      >      >      >      >          >     Hi all,
>      >      >      >      >      >          >
>      >      >      >      >      >          >     First, I'm not sure I
>     understand
>      >      >     what the
>      >      >      >     overlap
>      >      >      >      >      >         parameter in
>      >      >      >      >      >          >   
>       DMPlexDistributeOverlap does. I
>      >      >     tried the
>      >      >      >     following:
>      >      >      >      >      >         generate a small
>      >      >      >      >      >          >     mesh on 1 rank with
>      >      >     DMPlexCreateBoxMesh, then
>      >      >      >      >     distribute
>      >      >      >      >      >         it with
>      >      >      >      >      >          >     DMPlexDistribute. At
>     this point I
>      >      >     have two nice
>      >      >      >      >      >         partitions, with shared
>      >      >      >      >      >          >     vertices and no
>     overlapping
>      >     cells.
>      >      >     Then I call
>      >      >      >      >      >         DMPlexDistributeOverlap
>      >      >      >      >      >          >     with the overlap parameter
>      >     set to 0
>      >      >     or 1,
>      >      >      >     and get the
>      >      >      >      >      >         same resulting
>      >      >      >      >      >          >     plex in both cases.
>     Why is that ?
>      >      >      >      >      >          >
>      >      >      >      >      >          >
>      >      >      >      >      >          > The overlap parameter says how
>      >     many cell
>      >      >      >     adjacencies to go
>      >      >      >      >      >         out. You
>      >      >      >      >      >          > should not get the same
>      >      >      >      >      >          > mesh out. We have lots of
>      >     examples that use
>      >      >      >     this. If
>      >      >      >      >     you send
>      >      >      >      >      >         your small
>      >      >      >      >      >          > example, I can probably
>      >      >      >      >      >          > tell you what is happening.
>      >      >      >      >      >          >
>      >      >      >      >      >
>      >      >      >      >      >         Ok so I do have a small
>     example on
>      >     that and the
>      >      >      >     DMClone
>      >      >      >      >     thing I
>      >      >      >      >      >         set up
>      >      >      >      >      >         to understand! I attach it to
>     the email.
>      >      >      >      >      >
>      >      >      >      >      >         For the overlap, you can
>     change the
>      >     overlap
>      >      >      >     constant at
>      >      >      >      >     the top
>      >      >      >      >      >         of the
>      >      >      >      >      >         file. With OVERLAP=0 or 1, the
>      >     distributed
>      >      >      >     overlapping mesh
>      >      >      >      >      >         (shown using
>      >      >      >      >      >         -over_dm_view, it's DMover)
>     are the
>      >     same, and
>      >      >      >     different
>      >      >      >      >     from the
>      >      >      >      >      >         mesh
>      >      >      >      >      >         before distributing the overlap
>      >     (shown using
>      >      >      >      >     -distrib_dm_view). For
>      >      >      >      >      >         larger overlap values they're
>     different.
>      >      >      >      >      >
>      >      >      >      >      >         The process is:
>      >      >      >      >      >         1/ create a DM dm on 1 rank
>      >      >      >      >      >         2/ clone dm into dm2
>      >      >      >      >      >         3/ distribute dm
>      >      >      >      >      >         4/ clone dm into dm3
>      >      >      >      >      >         5/ distribute dm overlap
>      >      >      >      >      >
>      >      >      >      >      >         I print all the DMs after
>     each step.
>      >     dm has a
>      >      >      >     distributed
>      >      >      >      >      >         overlap, dm2
>      >      >      >      >      >         is not distributed, dm3 is
>      >     distributed but
>      >      >     without
>      >      >      >      >     overlap. Since
>      >      >      >      >      >         distribute and distributeOverlap
>      >     create new
>      >      >     DMs, I
>      >      >      >     don't seem
>      >      >      >      >      >         have a
>      >      >      >      >      >         problem with the shallow copies.
>      >      >      >      >      >
>      >      >      >      >      >
>      >      >      >      >      >          >     Second, I'm wondering what
>      >     would be
>      >      >     a good
>      >      >      >     way to
>      >      >      >      >     handle
>      >      >      >      >      >         two overlaps
>      >      >      >      >      >          >     and associated local
>     vectors.
>      >     In my
>      >      >     adaptation
>      >      >      >      >     code, the
>      >      >      >      >      >         remeshing
>      >      >      >      >      >          >     library requires a
>      >     non-overlapping mesh,
>      >      >      >     while the
>      >      >      >      >      >         refinement criterion
>      >      >      >      >      >          >     computation is based
>     on hessian
>      >      >      >     computations, which
>      >      >      >      >      >         require a layer of
>      >      >      >      >      >          >     overlap. What I can do is
>      >     clone the
>      >      >     dm before
>      >      >      >      >      >         distributing the overlap,
>      >      >      >      >      >          >     then manage two
>     independent plex
>      >      >     objects with
>      >      >      >      >     their own
>      >      >      >      >      >         local sections
>      >      >      >      >      >          >     etc. and copy/trim
>     local vectors
>      >      >     manually.
>      >      >      >     Is there a
>      >      >      >      >      >         more automatic
>      >      >      >      >      >          >     way
>      >      >      >      >      >          >     to do this ?
>      >      >      >      >      >          >
>      >      >      >      >      >          >
>      >      >      >      >      >          > DMClone() is a shallow
>     copy, so that
>      >      >     will not work.
>      >      >      >      >     You would
>      >      >      >      >      >         maintain
>      >      >      >      >      >          > two different Plexes,
>     overlapping
>      >      >      >      >      >          > and non-overlapping, with
>     their
>      >     own sections
>      >      >      >     and vecs. Are
>      >      >      >      >      >         you sure you
>      >      >      >      >      >          > need to keep around the
>      >     non-overlapping one?
>      >      >      >      >      >          > Maybe if I understood what
>     operations
>      >      >     you want
>      >      >      >     to work, I
>      >      >      >      >      >         could say
>      >      >      >      >      >          > something more definitive.
>      >      >      >      >      >          >
>      >      >      >      >      >         I need to be able to pass the
>      >      >     non-overlapping mesh
>      >      >      >     to the
>      >      >      >      >      >         remesher. I
>      >      >      >      >      >         can either maintain 2 plexes, or
>      >     trim the
>      >      >     overlapping
>      >      >      >      >     plex when
>      >      >      >      >      >         I create
>      >      >      >      >      >         the arrays I give to the
>     remesher.
>      >     I'm not sure
>      >      >      >     which is the
>      >      >      >      >      >         best/worst ?
>      >      >      >      >      >
>      >      >      >      >      >         Thanks
>      >      >      >      >      >
>      >      >      >      >      >         --
>      >      >      >      >      >         Nicolas
>      >      >      >      >      >
>      >      >      >      >      >
>      >      >      >      >      >          >    Thanks,
>      >      >      >      >      >          >
>      >      >      >      >      >          >       Matt
>      >      >      >      >      >          >
>      >      >      >      >      >          >     Thanks
>      >      >      >      >      >          >
>      >      >      >      >      >          >     --
>      >      >      >      >      >          >     Nicolas
>      >      >      >      >      >          >
>      >      >      >      >      >          >
>      >      >      >      >      >          >
>      >      >      >      >      >          > --
>      >      >      >      >      >          > What most experimenters
>     take for
>      >     granted
>      >      >     before
>      >      >      >     they
>      >      >      >      >     begin their
>      >      >      >      >      >          > experiments is infinitely more
>      >      >     interesting than any
>      >      >      >      >     results
>      >      >      >      >      >         to which
>      >      >      >      >      >          > their experiments lead.
>      >      >      >      >      >          > -- Norbert Wiener
>      >      >      >      >      >          >
>      >      >      >      >      >          >
>     https://www.cse.buffalo.edu/~knepley/
>      >      >      >      >      >       
>       <http://www.cse.buffalo.edu/~knepley/>
>      >      >      >      >      >
>      >      >      >      >      >
>      >      >      >      >      >
>      >      >      >      >      >     --
>      >      >      >      >      >     What most experimenters take for
>     granted
>      >     before
>      >      >     they
>      >      >      >     begin their
>      >      >      >      >      >     experiments is infinitely more
>      >     interesting than any
>      >      >      >     results
>      >      >      >      >     to which
>      >      >      >      >      >     their experiments lead.
>      >      >      >      >      >     -- Norbert Wiener
>      >      >      >      >      >
>      >      >      >      >      > https://www.cse.buffalo.edu/~knepley/
>      >      >      >      >      >   
>       <http://www.cse.buffalo.edu/~knepley/>
>      >      >      >      >      >
>      >      >      >      >      >
>      >      >      >      >      >
>      >      >      >      >      > --
>      >      >      >      >      > What most experimenters take for
>     granted before
>      >      >     they begin
>      >      >      >     their
>      >      >      >      >      > experiments is infinitely more
>     interesting
>      >     than any
>      >      >      >     results to which
>      >      >      >      >      > their experiments lead.
>      >      >      >      >      > -- Norbert Wiener
>      >      >      >      >      >
>      >      >      >      >      > https://www.cse.buffalo.edu/~knepley/
>      >      >      >      >     <http://www.cse.buffalo.edu/~knepley/>
>      >      >      >      >
>      >      >      >      >
>      >      >      >      >
>      >      >      >      > --
>      >      >      >      > What most experimenters take for granted before
>      >     they begin
>      >      >     their
>      >      >      >      > experiments is infinitely more interesting
>     than any
>      >      >     results to which
>      >      >      >      > their experiments lead.
>      >      >      >      > -- Norbert Wiener
>      >      >      >      >
>      >      >      >      > https://www.cse.buffalo.edu/~knepley/
>      >      >      >     <http://www.cse.buffalo.edu/~knepley/>
>      >      >      >
>      >      >      >
>      >      >      >
>      >      >      > --
>      >      >      > What most experimenters take for granted before
>     they begin
>      >     their
>      >      >      > experiments is infinitely more interesting than any
>      >     results to which
>      >      >      > their experiments lead.
>      >      >      > -- Norbert Wiener
>      >      >      >
>      >      >      > https://www.cse.buffalo.edu/~knepley/
>      >      >     <http://www.cse.buffalo.edu/~knepley/>
>      >      >
>      >      >
>      >      >
>      >      > --
>      >      > What most experimenters take for granted before they begin
>     their
>      >      > experiments is infinitely more interesting than any
>     results to which
>      >      > their experiments lead.
>      >      > -- Norbert Wiener
>      >      >
>      >      > https://www.cse.buffalo.edu/~knepley/
>      >     <http://www.cse.buffalo.edu/~knepley/>
>      >
>      >
>      >
>      > --
>      > What most experimenters take for granted before they begin their
>      > experiments is infinitely more interesting than any results to which
>      > their experiments lead.
>      > -- Norbert Wiener
>      >
>      > https://www.cse.buffalo.edu/~knepley/
>     <http://www.cse.buffalo.edu/~knepley/>
> 
> 
> 
> -- 
> What most experimenters take for granted before they begin their 
> experiments is infinitely more interesting than any results to which 
> their experiments lead.
> -- Norbert Wiener
> 
> https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>


More information about the petsc-users mailing list