How about something like,
MatMPIAIJGetSeqAIJ(A,NULL,&Ao,NULL);
> MatGetOwnershipRange(A, &rS, &rE);
> for (r = 0; r < rE-rS; ++r) {
> sum = 0.0;
> MatGetRow(Ao, r, &ncols, NULL, &vals);
> for (c = 0; c < ncols; ++c) sum += PetscAbsScalar(vals[c]);
// do what you need with sum
> }
Barry
> On Mar 4, 2019, at 10:38 AM, Matthew Knepley via petsc-users
> <[email protected]> wrote:
>
> On Mon, Mar 4, 2019 at 11:28 AM Cyrill Vonplanta via petsc-users
> <[email protected]> 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]);
> }
>
> 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/