On Wed, Oct 24, 2018 at 11:36 AM Maximilian Hartig <[email protected]> wrote:
> > > On 24. Oct 2018, at 12:49, Matthew Knepley <[email protected]> wrote: > > On Wed, Oct 24, 2018 at 6:29 AM Lawrence Mitchell <[email protected]> wrote: > >> Hi Max, >> >> (I'm cc'ing in the petsc-users mailing list which may have more advice, >> if you are using PETSc you should definitely subscribe! >> >> > On 24 Oct 2018, at 09:27, Maximilian Hartig <[email protected]> >> wrote: >> > >> > Hello Lawrence, >> > >> > sorry to message you out of the blue. My name is Max and I found your >> post on GitHub (https://github.com/firedrakeproject/firedrake/issues/1246 >> ) on DMPlex being able to read periodic gmsh files. I am currently >> trying to do just that (creating a periodic DMPlex mesh with gmsh) in the >> context of my PhD work. So far I haven’ t found any documentation on the >> periodic BC’s with DMPlex and gmsh in the official petsc documentation. >> > I was wondering whether you’d be so kind as to point me in a general >> direction concerning how to achieve this. You seem experienced in using >> petsc and I would greatly appreciate your help. >> >> >> I think the answer is "it depends". If you're just using DMPlex directly >> and all the of the functionality with PetscDS, then I /think/ that reading >> periodic meshes via gmsh (assuming you're using the appropriate gmsh mesh >> format [v2]) "just works". >> > > There are two phases here: topological and geometric. DMPlex represents > the periodic topological entity directly. For example, a circle is just a > segment with one end hooked to the other. Vertices are not duplicated, or > mapped to each other. This makes topology simple and easy to implement. > However, then geometry is more complicated. What Plex does is allow > coordinates to be represented by a discontinuous field taking values on > cells, in addition to vertices. In our circle example, each cells near the > cut will have 2 coordinates, one for each vertex, but they will not agree > across the cut. If you define a periodic domain, then Plex can construct > this coordinate field automatically using DMPlexLocalize(). These DG > coordinates are then used by the integration routines. > > > Ok, I think I understand the concept. DMPlex reads information about both > topology and coordinates from the .msh file. Creating a periodic mesh in > gmsh then should allow DMPlex to identify the periodic boundaries as the > “cut” and build the mesh topology accordingly. Coordinate information is > handled separately. > That means, as Lawrence suggested, building periodic meshes in gmsh and > reading them in to petsc’s DMPlex should indeed “just work”. (From the > user perspective). The only extra step is to call DMLocalizeCoordinates() > after DMPlexReadFromFile(). Sorry to reiterate, I am just trying to make > sense of this. > > > >> From my side, the issue is to do with mapping that coordinate field into >> one that I understand (within Firedrake). You may not have this problem. >> > > Firedrake uses its own coordinate mapping and integration routines, so > they must manage the second part independently. I hope to get change this > slightly soon by making the Firedrake representation a DMField, so that it > looks the same to Plex. > > Thanks, > > Matt > > >> Thanks, >> >> Lawrence > > > > -- > 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/ > > > To read periodic meshes from GMSH, you need to use the option > -dm_plex_gmsh_periodic and DMPlexCreateFromFile > > > Ahh, thanks. I was missing the option " -dm_plex_gmsh_periodic “. But > using this option I now generate a segmentation fault error when calling > VecView() on the solution vector with vtk and hdf5 viewers. Any suggestions? > Small example? VTK is deprecated. HDF5 should work, although it will require you to have proper coordinates I think. We have to think about what you mean. If its for a checkpoint, there is no problem, but for viz, those programs do not understand periodicity. Thus I embed it in a higher dimensional space. Matt > See src/dm/impls/plex/examples/tests/ex1.c. An example runs > > $ ./ex1 -filename > ${PETSC_DIR}/share/petsc/datafiles/meshes/cube_periodic_bin.msh > -dm_plex_gmsh_periodic -dm_view ::ascii_info_detail -interpolate -test_shape > > generating periodic meshes in gmsh may be tricky, Lisandro for sure may > advice. > > > Thanks, > Max > > -- 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/>
