[petsc-users] Getting access to matrix rows without and setting values simultaneously
Alexander Grayver
agrayver at gfz-potsdam.de
Thu Jun 16 09:19:51 CDT 2011
On 16.06.2011 16:07, Matthew Knepley wrote:
> On Thu, Jun 16, 2011 at 1:43 PM, Alexander Grayver
> <agrayver at gfz-potsdam.de <mailto:agrayver at gfz-potsdam.de>> wrote:
>
> >> Could you explain more about the task you're trying to do.
>
> Well, I can try. That is pretty specific task, I wouldn't like to
> go deep into details.
>
> Let's say we have a discretized model of some physical parameter m
> (say acoustic velocity). Number of model parameters is N. We need
> to take M measurements d within model (say time traveling of
> acoustic wave) based on M different sets of receiver/source positions.
> In our case N >> M (e.g. 10^7 >> 10^3).
> We have operator F (which might linear or not) that defines
> relationship between m and d:
> d=F(m)
>
> The operator F is just a system of equations actually. I have no
> problem now to solve it for any m.
>
> What I need now is to compute the variation of this operator:
>
> A = \frac{\partial d_i}{\partial m_j}, for all i=1..M, j=1..N
>
> After some maths this calculation could be reformulated as a
> triple product:
>
> A_i = C*F(m)^-1*v
>
> Where C some sparse matrix.
>
> Once the A is computed I want to solve another problem:
>
> (A'*A)b=A'*r
>
> Which is a Gauss-Newton system now,
> A'*A is truncated Hessian,
> A'*r is gradient,
> r = d - d_obs, where d_obs is the real observed data.
> b -- model change which have to applied to original model m in
> order to explain your observed data better
>
> The latter problem I want to solve using petsc matrix-free
> formulation and some iterative solver (haven't decided yet which,
> could you advice one?).
>
> But the POINT here is that the latter problem must be solved not
> in the original m-space, but in transformed x-space. For that we
> need another A:
>
> A_tr = \frac{\partial d_i}{\partial x_j}
>
> However, using chain rule you can represent A_tr in terms of A:
>
> A = \frac{\partial d_i}{\partial m_j} * \frac{\partial
> m_j}{\partial x_j}
>
> \frac{\partial m_j}{\partial x_j} - is the exactly transformation
> I want to apply to matrix A. It's a simple scalar expression, but
> has to be applied to each element of A.
>
> Did it help? :)
>
>
> Do you ever actually use A? If not, why not just build the transformed
> operator directly?
Two reasons:
1. It's wrong from the architectural point view. At the point where I
compute A I prefer know nothing about transformation, just working with
original physical parameters is much more natural.
2. This original A might be used in the future.
I really suggested that would be easier to apply this transformation to
the whole matrix. If it's impossible than I have to find another way.
Just want to be sure of that.
>
> Matt
>
> Regards,
> Alexander
>
>
>
> On 16.06.2011 14:55, Jed Brown wrote:
>> On Thu, Jun 16, 2011 at 14:48, Alexander Grayver
>> <agrayver at gfz-potsdam.de <mailto:agrayver at gfz-potsdam.de>> wrote:
>>
>> 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.
>>
>>
>> Could you explain more about the task you're trying to do.
>> Pseudocode or Matlab for the whole process would be useful. There
>> might be a better way to do this without using Mat to store
>> something that is not a linear operator.
>
>
>
>
> --
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20110616/68a8bba8/attachment.htm>
More information about the petsc-users
mailing list