From: John P. <pet...@cf...> - 2007-12-12 17:39:01
|
David Knezevic wrote: > I attached two extra (Petsc) matrices to an ImplicitSystem, assembled > one of them, and then tried to add them together using > PetscMatrix::add, but it didn't work because the sparsity patterns of > the two matrices weren't the same. This is because PetscMatrix::init() > doesn't generate a sparsity pattern from its dof_map, it simply sets > the appropriate number of rows, columns and non-zeros, so the matrix I > didn't touch actually had no sparsity pattern. > > A simple fix was to change SAME_NONZERO_PATTERN in PetscMatrix::add to > DIFFERENT_NON_ZERO_PATTERN. But perhaps it would be more satisfactory > to loop over the dof_map in PetscMatrix::init() and set each entry in > the matrix sparsity pattern to zero explicitly (that would get the > Petsc to store the sparsity pattern, right? I should look that up...) > > - David |
From: Benjamin K. <ben...@na...> - 2007-12-12 17:45:24
|
>> I attached two extra (Petsc) matrices to an ImplicitSystem, assembled >> one of them, and then tried to add them together using >> PetscMatrix::add, but it didn't work because the sparsity patterns of >> the two matrices weren't the same. This is because PetscMatrix::init() >> doesn't generate a sparsity pattern from its dof_map, it simply sets >> the appropriate number of rows, columns and non-zeros, so the matrix I >> didn't touch actually had no sparsity pattern. >> >> A simple fix was to change SAME_NONZERO_PATTERN in PetscMatrix::add to >> DIFFERENT_NON_ZERO_PATTERN. But perhaps it would be more satisfactory >> to loop over the dof_map in PetscMatrix::init() and set each entry in >> the matrix sparsity pattern to zero explicitly (that would get the >> Petsc to store the sparsity pattern, right? I should look that up...) That should be OK in general, providing the preallocation is done properly and setting the values individually does not incur huge dynamic memory overhead... I suppose, though, the simple fix may be the right one. I think in general we would like to be able to add matrices with different sparsity patterns, right? -Ben |