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/>