[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