Yes, this does the trick for me. Thanks. Thx Cyrill
> On 5 Mar 2019, at 00:10, Smith, Barry F. <[email protected]> wrote: > > > 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/ >
