This makes that change to improve the behavior of the release branch: https://gitlab.com/petsc/petsc/-/merge_requests/4818
For reference in the future, also see this related issue: https://gitlab.com/petsc/petsc/-/issues/852 Am Fr., 4. Feb. 2022 um 12:03 Uhr schrieb Patrick Sanan < patrick.sa...@gmail.com>: > So, seems like a fix we should make at this point is to make > MatPreallocator explicitly single use, throwing an error if > MatPreallocatorPreallocate is called a second time. (Still open for further > debate as to what to do in general but this quick patch to release to > replace the crash with an error message seems justified in any case). > > Am Fr., 4. Feb. 2022 um 02:02 Uhr schrieb Jed Brown <j...@jedbrown.org>: > >> MatPreallocator stores "the nonzero structure" in a hash table so it can >> be easily updated. A normal Mat stores it in a compressed (CSR) format that >> is expensive to update. >> >> Marius Buerkle <mbuer...@web.de> writes: >> >> > Ok. I did not know that. I was under the impression that >> MatPreallocator does actually not allocate the nonzeros and just stores the >> nonzero structure. But if this is not the case then of course I just >> duplicate the matrix. >> > >> > Thanks for the feedback. >> > >> >> Gesendet: Donnerstag, den 03.02.2022 um 03:09 Uhr >> >> Von: "Jed Brown" <j...@jedbrown.org> >> >> An: "Marius Buerkle" <mbuer...@web.de>, "Patrick Sanan" < >> patrick.sa...@gmail.com> >> >> Cc: "PETSc users list" <petsc-us...@mcs.anl.gov>, petsc-dev < >> petsc-dev@mcs.anl.gov> >> >> Betreff: Re: Aw: Re: [petsc-dev] [petsc-users] >> MatPreallocatorPreallocate segfault with PETSC 3.16 >> >> >> >> Marius Buerkle <mbuer...@web.de> writes: >> >> >> >> > Thanks for they reply. Yes the example works, this is how I was >> doing it before. But the matrix is rather big and i need a matrix with the >> same structure at various points in my code. So it was convenient to create >> the matrix with preallocate, destroy it after using it to free the memory >> and creating it again later with the same preallocate. >> >> > Anyway it works with MatDuplicate for now. >> >> >> >> I think it should take *less* memory to destroy the preallocator and >> duplicate the actual matrix than to destroy the matrix and persist the >> preallocator. If that is not the case (or close enough), we can make it so. >> >