<div dir="ltr">---------- Forwarded message ----------<br><div class="gmail_quote">From: <b class="gmail_sendername">Jack Poulson</b> <span dir="ltr"><<a href="mailto:poulson@stanford.edu">poulson@stanford.edu</a>></span><br>Date: Mon, Oct 27, 2014 at 9:27 PM<br>Subject: [<a href="mailto:dev@libelemental.org">dev@libelemental.org</a>] Re: [elemental] Fwd: [petsc-users] MatZeroRows and MATELEMENTAL<br>To: "dev@libele >> Elemental" <<a href="mailto:dev@libelemental.org">dev@libelemental.org</a>>, Matthew Knepley <<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>><br><br><br>Hi Matt,<br>
<br>
At first glance, I would have suggested EntrywiseFill [1,2,3], which<br>
takes an arbitrary function, say<br>
<br>
    fill : (i,j) |-> T<br>
<br>
and sets each entry (i,j) of a matrix of type T to fill(i,j), but the<br>
documentation for MatZeroRows [4] states that only a subset of rows are<br>
to be modified.<br>
<br>
I would instead implement this as follows (in C++), for the slightly<br>
more general case where the off-diagonal value can be arbitrary:<br>
<br>
template<typename T><br>
void ModifyRows<br>
( AbstractDistMatrix<T>& A, const std::vector<Int>& rowInd,<br>
  T diagVal, T offDiagVal )<br>
{<br>
    DEBUG_ONLY(CallStackEntry cse("ModifyRows"))<br>
    const Int numRows = rowInd.size();<br>
    const Int localWidth = A.LocalWidth();<br>
    for( Int s=0; s<numRows; ++s )<br>
    {<br>
        const Int row = rowInd[s];<br>
        if( A.IsLocalRow(row) )<br>
        {<br>
            const Int iLoc = A.LocalRow(row);<br>
            for( Int jLoc=0; jLoc<localWidth; ++jLoc )<br>
            {<br>
                const Int j = A.GlobalCol(jLoc);<br>
                if( i == j )<br>
                    A.SetLocal( iLoc, jLoc, diagVal );<br>
                else<br>
                    A.SetLocal( iLoc, jLoc, offDiagVal );<br>
            }<br>
        }<br>
    }<br>
}<br>
<br>
If you are coming from C, one simply needs to convert the buffer into an<br>
std::vector via<br>
<br>
    std::vector<Int> rowInd(rows,rows+numRows);<br>
<br>
Jack<br>
<br>
P.S. The release candidate for 0.85 is coming in a few hours.<br>
<br>
[1]<br>
<a href="https://github.com/elemental/Elemental/blob/396a8cebc46ea13c4fbdc51a1f21fce2c1a75edf/include/El/blas_like/level1.hpp#L176" target="_blank">https://github.com/elemental/Elemental/blob/396a8cebc46ea13c4fbdc51a1f21fce2c1a75edf/include/El/blas_like/level1.hpp#L176</a><br>
<br>
[2]<br>
<a href="https://github.com/elemental/Elemental/blob/396a8cebc46ea13c4fbdc51a1f21fce2c1a75edf/include/El/blas_like/level1.h#L314" target="_blank">https://github.com/elemental/Elemental/blob/396a8cebc46ea13c4fbdc51a1f21fce2c1a75edf/include/El/blas_like/level1.h#L314</a><br>
<br>
[3]<br>
<a href="https://github.com/elemental/Elemental/blob/396a8cebc46ea13c4fbdc51a1f21fce2c1a75edf/include/El/blas_like/level1.py#L485" target="_blank">https://github.com/elemental/Elemental/blob/396a8cebc46ea13c4fbdc51a1f21fce2c1a75edf/include/El/blas_like/level1.py#L485</a><br>
<br>
<br>
[4]<br>
<a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatZeroRows.html" target="_blank">http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatZeroRows.html</a><br>
<span class=""><br>
On 10/27/2014 02:36 PM, Matthew Knepley wrote:<br>
> I do not know the answer to this one. Is there something in that does<br>
> the equivalent of<br>
> MatZeroRows(), or do you do it by hand?<br>
><br>
>   Thanks,<br>
><br>
>     Matt<br>
><br>
> ---------- Forwarded message ----------<br>
</span><span class="">> From: *Francesco Ballarin* <<a href="mailto:francesco.ballarin@polimi.it">francesco.ballarin@polimi.it</a><br>
> <mailto:<a href="mailto:francesco.ballarin@polimi.it">francesco.ballarin@polimi.it</a>>><br>
> Date: Sun, Oct 26, 2014 at 4:32 AM<br>
> Subject: [petsc-users] MatZeroRows and MATELEMENTAL<br>
</span><div><div class="h5">> To: <a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a> <mailto:<a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a>><br>
><br>
><br>
> Dear PETSc users,<br>
> I have a code for PETSc 3.3 in which the PLAPACK interface, now<br>
> discontinued, was used. I am trying to update it to PETSc 3.5.2, using<br>
> the Elemental interface.<br>
><br>
> I see that MatZeroRows is not implemented for MATELEMENTAL. What<br>
> function should I use instead? Does it also support the version with<br>
> optional arguments x and b?<br>
><br>
> Thanks,<br>
> best regards,<br>
> Francesco<br>
><br>
><br>
><br>
> --<br>
> What most experimenters take for granted before they begin their<br>
> experiments is infinitely more interesting than any results to which<br>
> their experiments lead.<br>
> -- Norbert Wiener<br>
><br>
> --<br>
> You received this message because you are subscribed to the Google<br>
> Groups "elemental-dev" group.<br>
> To unsubscribe from this group and stop receiving emails from it, send<br>
> an email to <a href="mailto:elemental-dev%2Bunsubscribe@googlegroups.com">elemental-dev+unsubscribe@googlegroups.com</a><br>
</div></div>> <mailto:<a href="mailto:elemental-dev%2Bunsubscribe@googlegroups.com">elemental-dev+unsubscribe@googlegroups.com</a>>.<br>
<div class="HOEnZb"><div class="h5">> For more options, visit <a href="https://groups.google.com/d/optout" target="_blank">https://groups.google.com/d/optout</a>.<br>
<br>
</div></div></div><br></div>