This is something I almost started a while ago. https://gitlab.com/petsc/petsc/-/issues/852
It would be a very interesting addition to us. Fande > On Jan 12, 2022, at 12:04 AM, Barry Smith <bsm...@petsc.dev> wrote: > > > Why does it need to handle values? > >> On Jan 12, 2022, at 12:43 AM, Jed Brown <j...@jedbrown.org> wrote: >> >> I agree with this and even started a branch jed/mat-hash in (yikes!) 2017. I >> think it should be default if no preallocation functions are called. But it >> isn't exactly the MATPREALLOCATOR code because it needs to handle values >> too. Should not be a lot of code and will essentially remove this FAQ and >> one of the most irritating subtle aspects of new codes using PETSc matrices. >> >> https://petsc.org/release/faq/#assembling-large-sparse-matrices-takes-a-long-time-what-can-i-do-to-make-this-process-faster-or-matsetvalues-is-so-slow-what-can-i-do-to-speed-it-up >> >> Barry Smith <bsm...@petsc.dev> writes: >> >>> I think the MATPREALLOCATOR as a MatType is a cumbersome strange thing and >>> would prefer it was just functionality that Mat provided directly; for >>> example MatSetOption(mat, preallocator_mode,true); matsetvalues,... >>> MatAssemblyBegin/End. Now the matrix has its proper nonzero structure of >>> whatever type the user set initially, aij, baij, sbaij, .... And the user >>> can now use it efficiently. >>> >>> Barry >>> >>> So turning on the option just swaps out temporarily the operations for >>> MatSetValues and AssemblyBegin/End to be essentially those in >>> MATPREALLOCATOR. The refactorization should take almost no time and would >>> be faster than trying to rig dmstag to use MATPREALLOCATOR as is. >>> >>> >>>> On Jan 11, 2022, at 9:43 PM, Matthew Knepley <knep...@gmail.com> wrote: >>>> >>>> On Tue, Jan 11, 2022 at 12:09 PM Patrick Sanan <patrick.sa...@gmail.com >>>> <mailto:patrick.sa...@gmail.com>> wrote: >>>> Working on doing this incrementally, in progress here: >>>> https://gitlab.com/petsc/petsc/-/merge_requests/4712 >>>> <https://gitlab.com/petsc/petsc/-/merge_requests/4712> >>>> >>>> This works in 1D for AIJ matrices, assembling a matrix with a maximal >>>> number of zero entries as dictated by the stencil width (which is intended >>>> to be very very close to what DMDA would do if you >>>> associated all the unknowns with a particular grid point, which is the way >>>> DMStag largely works under the hood). >>>> >>>> Dave, before I get into it, am I correct in my understanding that >>>> MATPREALLOCATOR would be better here because you would avoid superfluous >>>> zeros in the sparsity pattern, >>>> because this routine wouldn't have to assemble the Mat returned by >>>> DMCreateMatrix()? >>>> >>>> Yes, here is how it works. You throw in all the nonzeros you come across. >>>> Preallocator is a hash table that can check for duplicates. At the end, it >>>> returns the sparsity pattern. >>>> >>>> Thanks, >>>> >>>> Matt >>>> >>>> If this seems like a sane way to go, I will continue to add some more >>>> tests (in particular periodic BCs not tested yet) and add the code for 2D >>>> and 3D. >>>> >>>> >>>> >>>> Am Mo., 13. Dez. 2021 um 20:17 Uhr schrieb Dave May >>>> <dave.mayhe...@gmail.com <mailto:dave.mayhe...@gmail.com>>: >>>> >>>> >>>> On Mon, 13 Dec 2021 at 20:13, Matthew Knepley <knep...@gmail.com >>>> <mailto:knep...@gmail.com>> wrote: >>>> On Mon, Dec 13, 2021 at 1:52 PM Dave May <dave.mayhe...@gmail.com >>>> <mailto:dave.mayhe...@gmail.com>> wrote: >>>> On Mon, 13 Dec 2021 at 19:29, Matthew Knepley <knep...@gmail.com >>>> <mailto:knep...@gmail.com>> wrote: >>>> On Mon, Dec 13, 2021 at 1:16 PM Dave May <dave.mayhe...@gmail.com >>>> <mailto:dave.mayhe...@gmail.com>> wrote: >>>> >>>> >>>> On Sat 11. Dec 2021 at 22:28, Matthew Knepley <knep...@gmail.com >>>> <mailto:knep...@gmail.com>> wrote: >>>> On Sat, Dec 11, 2021 at 1:58 PM Tang, Qi <tan...@msu.edu >>>> <mailto:tan...@msu.edu>> wrote: >>>> Hi, >>>> Does anyone have comment on finite difference coloring with DMStag? We are >>>> using DMStag and TS to evolve some nonlinear equations implicitly. It >>>> would be helpful to have the coloring Jacobian option with that. >>>> >>>> Since DMStag produces the Jacobian connectivity, >>>> >>>> This is incorrect. >>>> The DMCreateMatrix implementation for DMSTAG only sets the number of >>>> nonzeros (very inaccurately). It does not insert any zero values and thus >>>> the nonzero structure is actually not defined. >>>> That is why coloring doesn’t work. >>>> >>>> Ah, thanks Dave. >>>> >>>> Okay, we should fix that.It is perfectly possible to compute the nonzero >>>> pattern from the DMStag information. >>>> >>>> Agreed. The API for DMSTAG is complete enough to enable one to >>>> loop over the cells, and for all quantities defined on the cell (centre, >>>> face, vertex), >>>> insert values into the appropriate slot in the matrix. >>>> Combined with MATPREALLOCATOR, I believe a compact and readable >>>> code should be possible to write for the preallocation (cf DMDA). >>>> >>>> I think the only caveat with the approach of using all quantities defined >>>> on the cell is >>>> It may slightly over allocate depending on how the user wishes to impose >>>> the boundary condition, >>>> or slightly over allocate for says Stokes where there is no >>>> pressure-pressure coupling term. >>>> >>>> Yes, and would not handle higher order stencils.I think the overallocating >>>> is livable for the first imeplementation. >>>> >>>> >>>> Sure, but neither does DMDA. >>>> >>>> The user always has to know what they are doing and set the stencil width >>>> accordingly. >>>> I actually had this point listed in my initial email (and the stencil >>>> growth issue when using FD for nonlinear problems), >>>> however I deleted it as all the same issue exist in DMDA and no one >>>> complains (at least not loudly) :D >>>> >>>> >>>> >>>> >>>> Thanks, >>>> >>>> Matt >>>> >>>> Thanks, >>>> Dave >>>> >>>> >>>> Paging Patrick :) >>>> >>>> Thanks, >>>> >>>> Matt >>>> >>>> Thanks, >>>> Dave >>>> >>>> >>>> you can use -snes_fd_color_use_mat. It has many options. Here is an >>>> example of us using that: >>>> >>>> https://gitlab.com/petsc/petsc/-/blob/main/src/snes/tutorials/ex19.c#L898 >>>> <https://gitlab.com/petsc/petsc/-/blob/main/src/snes/tutorials/ex19.c#L898> >>>> >>>> Thanks, >>>> >>>> Matt >>>> >>>> Thanks, >>>> Qi >>>> >>>> >>>>> On Oct 15, 2021, at 3:07 PM, Jorti, Zakariae via petsc-users >>>>> <petsc-users@mcs.anl.gov <mailto:petsc-users@mcs.anl.gov>> wrote: >>>>> >>>>> Hello, >>>>> >>>>> Does the Jacobian approximation using coloring and finite differencing of >>>>> the function evaluation work in DMStag? >>>>> Thank you. >>>>> Best regards, >>>>> >>>>> Zakariae >>>> >>>> >>>> >>>> -- >>>> 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/> >