[petsc-users] Getting access to matrix rows without and setting values simultaneously
Alexander Grayver
agrayver at gfz-potsdam.de
Thu Jun 16 07:48:48 CDT 2011
Jed, I'm afraid we are talking about different "grids", by the grid I
meant that this matrix is 2d array, not a real grid of some physical
parameters or whatever and it's also not a linear operator itself. Sorry
that I possibly made you confused.
It's very big and that is why I chose PETSc. I compute this matrix as a
product of three other petsc matrices, one of which is also dense.
Now I need this transformation to be applied and then I'm planning to
use this matrix to create my operator, more precisely I need to use A'*A
as the linear operator and Matrix-Free notation since A'*A is dense and
even larger than original A.
So I guess I need A as a matrix, since (A'*A)*v operations will be
required further.
I completely understand that petsc Mat has certain field of applications
and my current problem is out of it, but still I wonder if there is a
way to apply a scalar operation to each element of the matrix?
Could you maybe give me an idea how to implement it? Any workaround?
Regards,
Alexander
On 16.06.2011 14:30, Jed Brown wrote:
> On Thu, Jun 16, 2011 at 14:08, Alexander Grayver
> <agrayver at gfz-potsdam.de <mailto:agrayver at gfz-potsdam.de>> wrote:
>
> This matrix is rather grid o values.
>
>
> Okay, then you can manage it with a DA (DMDA in petsc-dev). This will
> give a better parallel distribution and give you access to entries in
> convenient ways (e.g. using arrays). See the section of the user's
> manual Structured Grids Using Distributed Arrays.
>
> In PETSc, the Mat type is for linear operators. A Mat might represent
> a transformation from one of your grids to another. A given state on
> the grid is given by a Vec, and DMDA will help you manage that.
>
> The operation is very simply, it's scalar. Let's say we have this
> matrix A of size MxN and I want to apply thw following operation
> to each element of the matrix:
>
> A(i,j) = log( (A(i,j) - a(j)) / (b(j) - A(i,j)) ),
> i=0..M-1 j=0..N-1
>
> the vectors a,b are just arrays size of N and have them on each
> processor.
>
>
> This will be very easy using DMDA.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20110616/01389d09/attachment.htm>
More information about the petsc-users
mailing list