[petsc-users] Get and Set the k-th diagonal elements

Xiangdong Liang xdliang at gmail.com
Fri May 6 16:23:57 CDT 2011


Thanks for your response, Barry. I am going to solve A_n x = b for
different A_n's. The difference between A_n's are only the main
diagonal and the k-th diagonal. I  want to generate the matrix A once,
and each time modify the main and k-th diagonals to get a new A_n.
That's the reason I am asking for efficient way to get and set k-th
diagonal. I may not need to get the k-th diagonal if I keep the adding
difference between each n. However, I still need to set the k-th
diagonal anyway.

More precisely, suppose my N-by-N matrix A=[a1, a2; a3, a4], where a1,
a2, a3 and a4 are n/2-by-n/2 sub-matrix. I am trying to modify the
diagonals of a1, a2, a3 and a4, which is the main and n/2-th diagonal
of A.

Thanks.

Xiangdong



On Fri, May 6, 2011 at 5:04 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
>
>  How are you planning to use these diagonals? This might help us make suggestions as to what is a reasonable approach. Accessing diagonals is not a natural operation for sparse matrices stored by rows or columns.
>
>   Barry
>
>
>
> On May 6, 2011, at 3:56 PM, Xiangdong Liang wrote:
>
>> Hello everyone,
>>
>> I am wondering whether there is some function like MatGetDiagonal to
>> get the k-th diagonal (above or below the main diagonal) of the matrix
>> A. If I have to write my own function, what built-in function should I
>> use to get a particular element of A? It seems that MatGetValues
>> returns a block of matrix. I guess if I only extract one element once,
>> it would not be efficient. Any suggestions? Thanks.
>>
>> Best,
>> Xiangdong
>
>


More information about the petsc-users mailing list