[petsc-users] DMPlexSetRefinementFunction

Matthew Knepley knepley at gmail.com
Sat Apr 13 09:26:50 CDT 2019


On Sat, Apr 13, 2019 at 9:29 AM David Fuentes <fuentesdt at gmail.com> wrote:

> using this mesh sizing function defined on nodes of the background mesh
> was the only way I could get it to work.
>

Okay, let me understand this. So you could specify a sizing function on the
current mesh. However, TetGen only
does 1 pass, so that gradiation might not be smooth enough. Thus you
specify the sizing function on a refined
background mesh, and get smoother gradiation.

Okay, I can make that work. I have to turn on a bunch of things in CTetGen
that were inactive.

There is an alternative to this. Since you know the sizing function, you
could use Pragmatic instead. The install is
much much harder, but it does work, and works in parallel, and can do
anisotropic refinement as well.

  Thanks,

     Matt



http://wias-berlin.de/software/tetgen/1.5/doc/manual/manual006.html#ff_mtr
>
> On Sat, Apr 13, 2019 at 6:25 AM Matthew Knepley <knepley at gmail.com> wrote:
>
>> On Sat, Apr 13, 2019 at 6:08 AM David Fuentes <fuentesdt at gmail.com>
>> wrote:
>>
>>> this refinement seems to work pretty well for what I was looking for.
>>> still testing... but tetgen seems to load these  background mesh files
>>> at the higher resolution to guide the refinement?
>>>
>>
>> Okay, I finally understand what the background mesh does. It gives the
>> mesh sizing function.
>>
>>
>>> $ tetgen -Vrmqk coarse.1.node
>>> Opening coarse.1.node.
>>> Opening coarse.1.ele.
>>> Opening coarse.1.face.
>>> Opening coarse.1.b.node.
>>> Opening coarse.1.b.ele.
>>> Opening coarse.1.b.mtr.
>>>
>>> do you think a reasonable approach would be for me work with two meshes
>>> in petsc?
>>>
>>
>> Sure, I can turn on that interface for you. I often have a few meshes in
>> the code.
>>
>>
>>> a coarse and fine mesh. and load a uniformly refined fine dmplex mesh as
>>> the background mesh?
>>>
>>
>> This is the only thing I dod not understand. If the background mesh is
>> uniformly refined, can't you just
>> use a cell volume limit? Maybe I am missing something in the terminology.
>>
>>    Matt
>>
>>
>>
>>>
>>> https://bitbucket.org/petsc/ctetgen/src/8ca66eb7de95b82f7969984bab6aacada6626b1d/ctetgen.c?at=master&fileviewer=file-view-default#ctetgen.c-22245
>>>
>>> [image: Screen Shot 2019-04-13 at 4.50.06 AM.png]
>>>
>>> On Tue, Jan 8, 2019 at 11:29 AM David Fuentes <fuentesdt at gmail.com>
>>> wrote:
>>>
>>>> sounds great! i've been working out of this guy -
>>>> https://github.com/fuentesdt/thermoembo
>>>>
>>>> and loading vtk data for the segmentation:
>>>> https://github.com/fuentesdt/thermoembo/blob/master/tutorials/exac.c#L50
>>>>
>>>> I can clean this up and separate into relevant directories ? or start
>>>> an new repo? which ever you prefer.
>>>>
>>>>
>>>>
>>>> On Tue, Jan 8, 2019 at 11:20 AM Matthew Knepley <knepley at gmail.com>
>>>> wrote:
>>>>
>>>>> On Mon, Jan 7, 2019 at 4:27 PM David Fuentes <fuentesdt at gmail.com>
>>>>> wrote:
>>>>>
>>>>>> ha! thanks for you time on this Matt. I'm trying to generate a mesh
>>>>>> from image segmentation data.
>>>>>> I would like to use an image segmentation to guide the refinement.
>>>>>> Figure 25 of this paper -
>>>>>> https://www.ices.utexas.edu/media/reports/2017/1707.pdf
>>>>>>
>>>>>
>>>>> Very cool. We can do that. Lets make an example and iterate. Want to
>>>>> make a repo you control? I will
>>>>> stick in a PETSc example that refines meshes (maybe Plex ex19), and we
>>>>> can experiment with both p4est
>>>>> and Pragmatic (installation of those is hardest part :) This sounds
>>>>> great.
>>>>>
>>>>>    Matt
>>>>>
>>>>>
>>>>>> On Mon, Jan 7, 2019 at 2:53 PM Matthew Knepley <knepley at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> On Mon, Jan 7, 2019 at 11:41 AM David Fuentes <fuentesdt at gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> thanks Matt,
>>>>>>>>
>>>>>>>> I posted a slightly modified example
>>>>>>>>
>>>>>>>> https://github.com/fuentesdt/dmplexrefinement/blob/master/ex45.c
>>>>>>>>
>>>>>>>> and changes from the orginal
>>>>>>>>
>>>>>>>>
>>>>>>>> https://github.com/fuentesdt/dmplexrefinement/blob/master/refinement.diff
>>>>>>>>
>>>>>>>>
>>>>>>>> This is what I'm seeing
>>>>>>>>
>>>>>>>>
>>>>>>>> https://github.com/fuentesdt/dmplexrefinement/blob/master/paraview.png
>>>>>>>>
>>>>>>>>
>>>>>>>> I'm refining based on this element centroid:
>>>>>>>>
>>>>>>>>
>>>>>>>> https://github.com/fuentesdt/dmplexrefinement/blob/master/testcentroid.stl
>>>>>>>>
>>>>>>>> unrefined -
>>>>>>>> https://github.com/fuentesdt/dmplexrefinement/blob/master/unrefined.vtu
>>>>>>>>
>>>>>>>> refined -
>>>>>>>> https://github.com/fuentesdt/dmplexrefinement/blob/master/refined.vtu
>>>>>>>>
>>>>>>>>
>>>>>>>> Maybe I don't understand the refinement algorithm, but the
>>>>>>>> refinement is a little offset from what I was expecting.
>>>>>>>>
>>>>>>>
>>>>>>> Okay, I have that working. I will make a branch and put this in it.
>>>>>>> For right now, I attach ex45.c (but it will not run since I put in stuff to
>>>>>>> take lower/upper from the command line). 3D refinement just sucks, but you
>>>>>>> can see it is refining cell 7, not 8. Its just that refinement
>>>>>>> propagates a long, long way.
>>>>>>>
>>>>>>> I have pretty much abandoned this type of refinement since it will
>>>>>>> not work in parallel, and the mesh generator
>>>>>>> interface is poor. I am transitioning everything to
>>>>>>>
>>>>>>>   - uniform refinement (ha!)
>>>>>>>   - cell marking (p4est likes this)
>>>>>>>   - metric tensor (Pragmatic likes this)
>>>>>>>
>>>>>>> I have some routines to convert marking <--> metric but they are not
>>>>>>> perfect I think. I can try and help do what you want with
>>>>>>> AMR if I have a better idea what it is.
>>>>>>>
>>>>>>>   Thanks,
>>>>>>>
>>>>>>>     Matt
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Also, can you pass an application context to the user refinement
>>>>>>>> function ?
>>>>>>>>
>>>>>>>>
>>>>>>>> https://github.com/fuentesdt/dmplexrefinement/blob/master/ex45.c#L119
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thu, Jan 3, 2019 at 7:49 AM Matthew Knepley <knepley at gmail.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> On Wed, Jan 2, 2019 at 7:28 PM David Fuentes via petsc-users <
>>>>>>>>> petsc-users at mcs.anl.gov> wrote:
>>>>>>>>>
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> Starting with TS example 45
>>>>>>>>>>
>>>>>>>>>> $ pwd
>>>>>>>>>> /opt/apps/PETSc/petsc-3.10.2
>>>>>>>>>> $ ls src/ts/examples/tutorials/ex45.c
>>>>>>>>>> src/ts/examples/tutorials/ex45.c
>>>>>>>>>>
>>>>>>>>>> petsc configured with: ./config/configure.py
>>>>>>>>>> --with-shared-libraries --with-clanguage=c++ --CFLAGS='-g -O0'
>>>>>>>>>> --CXXFLAGS='-g -O0'  --with-c2html=0 --download-ctetgen
>>>>>>>>>> --download-triangle --with-debugging=yes --download-netcdf
>>>>>>>>>> --download-zlib  --download-exodusii --download-hdf5 --download-pnetcdf
>>>>>>>>>>
>>>>>>>>>> I'm trying to refine the DMPlexCreateBoxMesh  with the
>>>>>>>>>> DMPlexSetRefinementFunction.
>>>>>>>>>> It generally seems to be working, except that the refined element
>>>>>>>>>> is slightly offset from what I was expecting.
>>>>>>>>>> Based on my application specific criteria, element id number 7 is
>>>>>>>>>> flagged to be refined by the DMPlexSetRefinementFunction but when I open in
>>>>>>>>>> paraview, it looks like element id number 8 is being refined. See attached
>>>>>>>>>> pic.
>>>>>>>>>>
>>>>>>>>>> [image: Screen Shot 2019-01-02 at 6.02.02 PM.png]
>>>>>>>>>> [image: Screen Shot 2019-01-02 at 6.02.11 PM.png]
>>>>>>>>>>
>>>>>>>>>> Is it possible that the maxVolumes array is 'off by one' when
>>>>>>>>>> transfering to tetgen data structures somehow ?
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I looked through and cannot see it by eye. Could you send me your
>>>>>>>>> modified example and I will walk through it with the
>>>>>>>>> debugger?
>>>>>>>>>
>>>>>>>>>   Thanks,
>>>>>>>>>
>>>>>>>>>      Matt
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> https://bitbucket.org/petsc/petsc/src/bd27d3f284687498e4c4678d234c0e308a5bc236/src/dm/impls/plex/plexadapt.c?at=master&fileviewer=file-view-default#plexadapt.c-252
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> (gdb) bt
>>>>>>>>>> #0  DMPlexRefine_CTetgen (dm=0x932180, maxVolumes=0x919710,
>>>>>>>>>> dmRefined=0x7fffffffb938) at
>>>>>>>>>> /opt/apps/PETSc/petsc-3.10.2/src/dm/impls/plex/generators/ctetgen/ctetgenerate.c:182
>>>>>>>>>> #1  0x00007ffff6b76401 in DMPlexRefine_Internal (dm=0x932180,
>>>>>>>>>> adaptLabel=0x0, dmRefined=0x7fffffffb938) at
>>>>>>>>>> /opt/apps/PETSc/petsc-3.10.2/src/dm/impls/plex/plexadapt.c:252
>>>>>>>>>> #2  0x00007ffff6b72720 in DMRefine_Plex (dm=0x932180, comm=0x6b,
>>>>>>>>>> dmRefined=0x7fffffffb938) at
>>>>>>>>>> /opt/apps/PETSc/petsc-3.10.2/src/dm/impls/plex/plexrefine.c:10361
>>>>>>>>>> #3  0x00007ffff6dad8ff in DMRefine (dm=0x932180, comm=0x6b,
>>>>>>>>>> dmf=0x7fffffffb938) at
>>>>>>>>>> /opt/apps/PETSc/petsc-3.10.2/src/dm/interface/dm.c:1808
>>>>>>>>>> #4  0x0000000000405274 in CreateMesh (comm=0x7ffff5891680
>>>>>>>>>> <ompi_mpi_comm_world>, dm=0x7fffffffb9d0, ctx=0x7fffffffba00) at
>>>>>>>>>> /rsrch1/ip/dtfuentes/github/thermoembo/tutorials/exac.c:253
>>>>>>>>>> #5  0x00000000004063c4 in main (argc=32, argv=0x7fffffffdb68) at
>>>>>>>>>> /rsrch1/ip/dtfuentes/github/thermoembo/tutorials/exac.c:336
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> 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/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20190413/7ecc0557/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Screen Shot 2019-04-13 at 4.50.06 AM.png
Type: image/png
Size: 84446 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20190413/7ecc0557/attachment-0001.png>


More information about the petsc-users mailing list