<div><br></div><div><br><div class="gmail_quote"><div dir="ltr">On Thu 25. Jun 2020 at 08:23, Ernesto Prudencio via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Thank you, Jose.<br>
<br>
However, in the case of a "matrix free" matrix, the APIs on PETSc seem to allow just the implementation of A.v, not of A' . w<br>
<br>
One could create another "matrix free" matrix B which could make the role of computing z = B . w = A' . w. But how could one force the routine MatMultTranspose(A, w, z) to call the routine for B? Here I am assuming that MatMultTranspose(A, w, z) is the routine that SLEPc calls internally in its algorithms when the user sets for implicit transpose.<br>
<br>
I see two possibilities (for brain storming, since I don't know if such approaches would be acceptable for the PETSc team and/or the SLEPc team):<br>
1) PETSc could add an entry for a second routine that computes [ A' . w ] when calling MatMFFDSetFunction()<br>
</blockquote><div dir="auto"><br></div><div dir="auto">MatMFFD is designed for providing the action of the jacobian associated with a nonlinear problem F(x)=0. It uses F to provide a finite difference approx of the action J w. It does not support actions J’ w. </div><div dir="auto"><br></div><div dir="auto">You will need to create a MatShell and supply the methods for MatMult and MatMultTranspose (as Jose suggested). </div><div dir="auto"><br></div><div dir="auto">Thanks</div><div dir="auto">Dave</div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto"><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">2) SLEPc could add an entry for the routine for computing [ A' . w ] when the matrix A is "matrix free"<br>
<br>
Thanks again,<br>
<br>
Ernesto.<br>
<br>
<br>
Schlumberger-Private<br>
<br>
-----Original Message-----<br>
From: Jose E. Roman [mailto:<a href="mailto:jroman@dsic.upv.es" target="_blank">jroman@dsic.upv.es</a>] <br>
Sent: Thursday, June 25, 2020 1:01 AM<br>
To: Ernesto Prudencio <<a href="mailto:EPrudencio@slb.com" target="_blank">EPrudencio@slb.com</a>><br>
Cc: <a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a><br>
Subject: [Ext] Re: [petsc-users] Question on SLEPc + computing SVD with a "matrix free" matrix<br>
<br>
Yes, you have to set it with SVDSetImplicitTranspose(), but then the matrix-free matrix should implement both "A.v" and "A'.v" operations.<br>
Jose<br>
<br>
<br>
> El 24 jun 2020, a las 23:25, Ernesto Prudencio via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>> escribió:<br>
> <br>
> Hi,<br>
>  <br>
> Is it possible to compute a SVD for a “matrix free” matrix?<br>
>  <br>
> At first, it seems it would be ok with a MatCreateMFFD() and MatMFFDSetFunction(), because one could then provide the routine that computes “A . v” for any given v, which is an operation needed by SLEPc. However, one would also need to set up the SVD object in SLEPc with an implicit transpose. Would that be possible?<br>
>  <br>
> Thanks in advance,<br>
>  <br>
> Ernesto.<br>
> <br>
> Schlumberger-Private<br>
</blockquote></div></div>