A follow up question: if I call preallocation, is there any performance difference between
MatSetValues <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatSetValues.html#MatSetValues>(mat,1,&I,1,&J,&v,INSERT_VALUES <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/INSERT_VALUES.html#INSERT_VALUES>); // insert value one by one vs MatSetValues <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatSetValues.html#MatSetValues>(Mat <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/Mat.html#Mat> mat,PetscInt <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscInt.html#PetscInt> m,const PetscInt <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscInt.html#PetscInt> idxm[],PetscInt <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscInt.html#PetscInt> n,const PetscInt <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscInt.html#PetscInt> idxn[],const PetscScalar <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscScalar.html#PetscScalar> v[],InsertMode <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/InsertMode.html#InsertMode> addv) // insert multiple values My input is triple arrays vector<int> r; vector<int> c; vector<double> a; where r/c are not sorted by rows/cols. I don't want to waste memory/time to create idxm/idxn unless there is a performance penalty. Thanks, Sam On Mon, Jan 11, 2021 at 12:27 PM Sam Guo <[email protected]> wrote: > Thanks! > > On Mon, Jan 11, 2021 at 12:25 PM Matthew Knepley <[email protected]> > wrote: > >> On Mon, Jan 11, 2021 at 3:00 PM Sam Guo <[email protected]> wrote: >> >>> Dear PETSc Dev Team, >>> The documentation recommends calling both of the above preallocation >>> routines for simplicity. Do we waste memory by calling both? >>> >> >> No. Only one will function, depending on the matrix type. >> >> Thanks, >> >> Matt >> >> >>> Thanks, >>> Sam >>> MATAIJMATAIJ >>> <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MATAIJ.html#MATAIJ> >>> = >>> "aij" - A matrix type to be used for sparse matrices. This matrix type is >>> identical to MATSEQAIJ >>> <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MATSEQAIJ.html#MATSEQAIJ> >>> when >>> constructed with a single process communicator, and MATMPIAIJ >>> <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MATMPIAIJ.html#MATMPIAIJ> >>> otherwise. >>> As a result, for single process communicators, MatSeqAIJSetPreallocation >>> <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatSeqAIJSetPreallocation.html#MatSeqAIJSetPreallocation> >>> is >>> supported, and similarly MatMPIAIJSetPreallocation >>> <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatMPIAIJSetPreallocation.html#MatMPIAIJSetPreallocation>() >>> is supported for communicators controlling multiple processes. It is >>> recommended that you call both of the above preallocation routines for >>> simplicity. >>> >> >> >> -- >> 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/> >> >
