When I run the exact code you sent with two ranks and—mat_type mpibaij, it runs as expected. If you modified the code in any way to demonstrate the bug, please send the modified code.
> On May 27, 2024, at 9:37 PM, Adrian Croucher <[email protected]> > wrote: > > hi Barry, > > On 28/05/24 7:46 am, Barry Smith wrote: >> >> Thanks for reporting this. It is a bug. I have a fixed branch >> barry/2024-05-27/fix-bug-baij-setvaluesblocked/release and associated merge >> request >> https://urldefense.us/v3/__https://gitlab.com/petsc/petsc/-/merge_requests/7578__;!!G_uCfscf7eWS!a-WLgSheyFC0FTQZJMgBXbqQiUtMfEJ-WXOnM0Xk_uUt-YMpC-sVyd0_nw778-iWSIz2bcFj6voBN0jevQdqDnE$ >> >> > Thanks very much, that does appear to fix the bug when I run my test program > in serial. > > If I run it on 2 processes, it is OK with AIJ matrix type, but with BAIJ I > get an error (see below). Is there another problem, or I am doing something > else wrong? > > - Adrian > > [0]PETSC ERROR: --------------------- Error Message > -------------------------------------------------------------- > [0]PETSC ERROR: Petsc has generated inconsistent data > [0]PETSC ERROR: Incorrect colmap > [0]PETSC ERROR: See > https://urldefense.us/v3/__https://petsc.org/release/faq/__;!!G_uCfscf7eWS!a-WLgSheyFC0FTQZJMgBXbqQiUtMfEJ-WXOnM0Xk_uUt-YMpC-sVyd0_nw778-iWSIz2bcFj6voBN0jeEw_ISG0$ > for trouble shooting. > [0]PETSC ERROR: Petsc Release Version 3.21.1, unknown > [0]PETSC ERROR: ./matmodify on a main-debug named EN438880 by acro018 Tue May > 28 13:33:46 2024 > [0]PETSC ERROR: Configure options --with-x --download-hdf5 --download-zlib > --download-netcdf --download-pnetcdf --download-exodusii --download-triangle > --download-ptscotch --download-chaco --download-hypre > [0]PETSC ERROR: #1 MatSetValuesBlocked_MPIBAIJ() at > /home/acro018/software/PETSc/code/src/mat/impls/baij/mpi/mpibaij.c:448 > [0]PETSC ERROR: #2 MatSetValuesBlocked() at > /home/acro018/software/PETSc/code/src/mat/interface/matrix.c:2030 > [0]PETSC ERROR: --------------------- Error Message > -------------------------------------------------------------- > [0]PETSC ERROR: It appears a new error in the code was triggered after a > previous error, possibly because: > [0]PETSC ERROR: - The first error was not properly handled via (for > example) the use of > [0]PETSC ERROR: PetscCall(TheFunctionThatErrors()); or > [0]PETSC ERROR: - The second error was triggered while handling the first > error. > [0]PETSC ERROR: Above is the traceback for the previous unhandled error, > below the traceback for the next error > [0]PETSC ERROR: ALL ERRORS in the PETSc libraries are fatal, you should add > the appropriate error checking to the code > [0]PETSC ERROR: Petsc has generated inconsistent data > [0]PETSC ERROR: Incorrect colmap > [0]PETSC ERROR: See > https://urldefense.us/v3/__https://petsc.org/release/faq/__;!!G_uCfscf7eWS!a-WLgSheyFC0FTQZJMgBXbqQiUtMfEJ-WXOnM0Xk_uUt-YMpC-sVyd0_nw778-iWSIz2bcFj6voBN0jeEw_ISG0$ > for trouble shooting. > [0]PETSC ERROR: Petsc Release Version 3.21.1, unknown > [0]PETSC ERROR: ./matmodify on a main-debug named EN438880 by acro018 Tue May > 28 13:33:46 2024 > [0]PETSC ERROR: Configure options --with-x --download-hdf5 --download-zlib > --download-netcdf --download-pnetcdf --download-exodusii --download-triangle > --download-ptscotch --download-chaco --download-hypre > [0]PETSC ERROR: #1 MatSetValuesBlocked_MPIBAIJ() at > /home/acro018/software/PETSc/code/src/mat/impls/baij/mpi/mpibaij.c:448 > [0]PETSC ERROR: #2 MatAssemblyEnd_MPIBAIJ() at > /home/acro018/software/PETSc/code/src/mat/impls/baij/mpi/mpibaij.c:943 > [0]PETSC ERROR: #3 MatAssemblyEnd() at > /home/acro018/software/PETSc/code/src/mat/interface/matrix.c:5820 > [0]PETSC ERROR: #4 matmodify.F90:40 > > > >> Barry >> >> >>> On May 26, 2024, at 10:45 PM, Adrian Croucher <[email protected]> >>> <mailto:[email protected]> wrote: >>> >>> hi, >>> >>> I've been trying creating a matrix with DMCreateMatrix() and then adding >>> extra blocks of nonzeros into it using MatSetValuesBlocked(), but getting >>> some unexpected results if I set the matrix type to BAIJ. It seems to >>> behave as expected if I use matrix type AIJ. >>> >>> I've attached a minimal example program. It reads in the DMPlex from file, >>> sets up a section on it, creates a matrix (blocksize 2) and then inserts a >>> single 2x2 block at global block indices (0,7). It views the matrix before >>> and after the insertion. >>> >>> If I run with "-dm_mat_type aij" it gives the expected results, but with >>> "-dm_mat_type baij" it doesn't - e.g. if run in serial, it adds the new >>> nonzeros in the right place but also adds a whole lot of other duplicated >>> entries in block row 0. >>> >>> Is there something I'm not understanding about BAIJ, or about >>> MatSetValuesBlocked()? or possibly some other mistake? >>> >>> - Adrian >>> >>> On 20/05/24 12:24 pm, Barry Smith wrote: >>>> >>>> You can call MatSetOption(mat,MAT_NEW_NONZERO_LOCATION_ERR) then insert >>>> the new values. If it is just a handful of new insertions the extra time >>>> should be small. >>>> >>>> Making a copy of the matrix won't give you a new matrix that is any >>>> faster to insert into so best to just use the same matrix. >>>> >>>> Barry >>>> >>>> >>>>> On May 19, 2024, at 7:44 PM, Adrian Croucher <[email protected]> >>>>> <mailto:[email protected]> wrote: >>>>> >>>>> This Message Is From an External Sender >>>>> This message came from outside your organization. >>>>> hi, >>>>> >>>>> I have a Jacobian matrix created using DMCreateMatrix(). What would be >>>>> the best way to add extra nonzero entries into it? >>>>> >>>>> I'm guessing that DMCreateMatrix() allocates the storage so the nonzero >>>>> structure can't really be easily modified. Would it be a case of >>>>> creating a new matrix, copying the nonzero entries from the original one >>>>> and then adding the extra ones, before calling MatSetUp() or similar? If >>>>> so, how exactly would you copy the nonzero structure from the original >>>>> matrix? >>>>> >>>>> Background: the flow problem I'm solving (on a DMPlex with finite volume >>>>> method) has complex source terms that depend on the solution (e.g. >>>>> pressure), and can also depend on other source terms. A simple example >>>>> is when fluid is extracted from one location, with a pressure-dependent >>>>> flow rate, and some of it is then reinjected in another location. This >>>>> can result in poor nonlinear solver convergence. I think the reason is >>>>> that there are effectively missing Jacobian entries in the row for the >>>>> reinjection cell, which should have an additional dependence on the >>>>> solution in the cell where fluid is extracted. >>>>> >>>>> - Adrian >>>>> >>>>> -- >>>>> Dr Adrian Croucher >>>>> Senior Research Fellow >>>>> Department of Engineering Science >>>>> Waipapa Taumata Rau / University of Auckland, New Zealand >>>>> email: [email protected] <mailto:[email protected]> >>>>> tel: +64 (0)9 923 4611 >>>>> >>>>> >>>> >>> -- >>> Dr Adrian Croucher >>> Senior Research Fellow >>> Department of Engineering Science >>> Waipapa Taumata Rau / University of Auckland, New Zealand >>> email: [email protected] <mailto:[email protected]> >>> tel: +64 (0)9 923 4611 >>> <3x3grid.exo><matmodify.F90> >> > -- > Dr Adrian Croucher > Senior Research Fellow > Department of Engineering Science > Waipapa Taumata Rau / University of Auckland, New Zealand > email: [email protected] <mailto:[email protected]> > tel: +64 (0)9 923 4611
