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

Reply via email to