[petsc-users] Compute the sum of the absolute values of the off-block diagonal entries of each row

Zhang, Junchao jczhang at mcs.anl.gov
Mon Mar 4 11:21:43 CST 2019



On Mon, Mar 4, 2019 at 10:39 AM Matthew Knepley via petsc-users <petsc-users at mcs.anl.gov<mailto:petsc-users at mcs.anl.gov>> wrote:
On Mon, Mar 4, 2019 at 11:28 AM Cyrill Vonplanta via petsc-users <petsc-users at mcs.anl.gov<mailto:petsc-users at mcs.anl.gov>> wrote:
Dear Petsc Users,

I am trying to implement a variant of the $l^1$-Gauss-Seidel smoother from https://doi.org/10.1137/100798806 (eq. 6.1 and below). One of the main issues is that I need to compute the sum  $\sum_j |a_{i_j}|$ of the matrix entries that are not part of the local diagonal block. I was looking for something like MatGetRowSumAbs but it looks like it hasn't been made yet.

I guess i have to come up with something myself, but would you know of some workaround for this without going too deep into PETCs?

MatGetOwnershipRange(A, &rS, &rE);
for (r = rS; r < rE; ++r) {
  sum = 0.0;
  MatGetRow(A, r, &ncols, &cols, &vals);
  for (c = 0; c < ncols; ++c) if ((cols[c] < rS) || (cols[c] >= rE)) sum += PetscAbsScalar(vals[c]);
}
Perhaps PETSc should have a MatGetRemoteRow (or MatGetRowOffDiagonalBlock) (A, r, &ncols, &cols, &vals).  MatGetRow() internally has to allocate memory and sort indices and values from local diagonal block and off-diagonal block. It is totally a waste in this case -- users do not care column indices and the local block.  With MatGetRemoteRow(A, r, &ncols, NULL, &vals), PETSc just needs to set an integer and a pointer.


  Thanks,

     Matt

Best Cyrill
--
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/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20190304/6649ee64/attachment-0001.html>


More information about the petsc-users mailing list