If you want to set all values in the matrix and have the SBAIJ matrix ignore those below the diagonal you can use
MatSetOption(mat,MAT_IGNORE_LOWER_TRIANGULAR,PETSC_TRUE); or the options database -mat_ignore_lower_triangular This is useful when you have a symmetric matrix but you want to switch between using AIJ and SBAIJ format without changing anything in the code. Barry > On Apr 7, 2017, at 10:19 AM, Barry Smith <bsm...@mcs.anl.gov> wrote: > > >> On Apr 7, 2017, at 6:40 AM, Florian Lindner <mailingli...@xgm.de> wrote: >> >> Hello, >> >> two questions about symmetric (MATSBAIJ) matrices. >> >> + Entries set with MatSetValue below the main diagonal are ignored. Is that >> by design? > > Yes > >> I rather expected setting A_ij to >> have the same effect as setting A_ji. > > You need to check the relationship between i and j and swap them if needed > before the call. > >> >> + Has MatSetOption to MAT_SYMMETRIC and MAT_SYMMETRIC_ETERNAL any gain on >> MATSBAIJ matrices? > > No > >> >> Thanks, >> Florian >> >> Test programm: >> >> >> #include "petscmat.h" >> #include "petscviewer.h" >> >> int main(int argc, char **argv) >> { >> PetscInitialize(&argc, &argv, "", NULL); >> PetscErrorCode ierr = 0; >> >> Mat A; >> ierr = MatCreate(PETSC_COMM_WORLD, &A); CHKERRQ(ierr); >> MatSetType(A, MATSBAIJ); CHKERRQ(ierr); >> ierr = MatSetSizes(A, 4, 4, PETSC_DECIDE, PETSC_DECIDE); CHKERRQ(ierr); >> ierr = MatSetUp(A); CHKERRQ(ierr); >> ierr = MatSetOption(A, MAT_SYMMETRIC, PETSC_TRUE); CHKERRQ(ierr); >> ierr = MatSetOption(A, MAT_SYMMETRY_ETERNAL, PETSC_TRUE); CHKERRQ(ierr); >> >> // Stored >> ierr = MatSetValue(A, 1, 2, 21, INSERT_VALUES); CHKERRQ(ierr); >> ierr = MatSetValue(A, 1, 1, 11, INSERT_VALUES); CHKERRQ(ierr); >> >> // Ignored >> ierr = MatSetValue(A, 2, 1, 22, INSERT_VALUES); CHKERRQ(ierr); >> ierr = MatSetValue(A, 3, 2, 32, INSERT_VALUES); CHKERRQ(ierr); >> ierr = MatSetValue(A, 3, 1, 31, INSERT_VALUES); CHKERRQ(ierr); >> >> ierr = MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY); CHKERRQ(ierr); >> ierr = MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY); CHKERRQ(ierr); >> >> PetscViewer viewer; >> ierr = PetscViewerCreate(PETSC_COMM_WORLD, &viewer); CHKERRQ(ierr); >> ierr = PetscViewerSetType(viewer, PETSCVIEWERASCII); CHKERRQ(ierr); >> ierr = PetscViewerPushFormat(viewer, PETSC_VIEWER_ASCII_DENSE); >> CHKERRQ(ierr); >> ierr = MatView(A, viewer); CHKERRQ(ierr); >> ierr = PetscViewerPopFormat(viewer); CHKERRQ(ierr); >> ierr = PetscViewerDestroy(&viewer); CHKERRQ(ierr); >> >> PetscFinalize(); >> return 0; >> } >